Fixes #350. * spot/twaalgos/product.cc: Implement this change. * NEWS, spot/twaalgos/product.hh: Mention it. * spot/twa/acc.cc, spot/twa/acc.hh (acc_cond::sat_mark): New method. * tests/python/_product_weak.ipynb: New file. * tests/Makefile.am: Add it. * tests/python/automata.ipynb, tests/python/highlighting.ipynb, tests/python/product.ipynb, tests/core/prodor.test: Adjust test cases.
2664 lines
216 KiB
Text
2664 lines
216 KiB
Text
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from IPython.display import display, HTML\n",
|
|
"import spot\n",
|
|
"from spot.jupyter import display_inline # display multiple arguments side-by-side\n",
|
|
"import buddy\n",
|
|
"spot.setup(show_default='.tvb')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Anatomy of a product\n",
|
|
"\n",
|
|
"In this notebook, we write a Python function that constructs the product of two automata.\n",
|
|
"\n",
|
|
"This is obviously not a new feature: Spot can already make a product of two automata using its `product()` function. \n",
|
|
"For instance:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div style='vertical-align:text-top;display:inline-block;'><?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.40.1 (20161225.0304)\n",
|
|
" -->\n",
|
|
"<!-- Pages: 1 -->\n",
|
|
"<svg width=\"78pt\" height=\"205pt\"\n",
|
|
" viewBox=\"0.00 0.00 78.00 205.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 1) rotate(0) translate(4 201)\">\n",
|
|
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-201 74,-201 74,4 -4,4\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"14\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">Inf(</text>\n",
|
|
"<text text-anchor=\"start\" x=\"36\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"52\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)</text>\n",
|
|
"<text text-anchor=\"start\" x=\"12\" y=\"-168.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">[Büchi]</text>\n",
|
|
"<!-- I -->\n",
|
|
"<!-- 0 -->\n",
|
|
"<g id=\"node2\" class=\"node\">\n",
|
|
"<title>0</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"18\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"18\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">0</text>\n",
|
|
"</g>\n",
|
|
"<!-- I->0 -->\n",
|
|
"<g id=\"edge1\" class=\"edge\">\n",
|
|
"<title>I->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M18,-159.8767C18,-156.822 18,-143.0552 18,-130.0759\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"18,-123.0193 21.1501,-130.0192 18,-126.5193 18.0001,-130.0193 18.0001,-130.0193 18.0001,-130.0193 18,-126.5193 14.8501,-130.0193 18,-123.0193 18,-123.0193\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g id=\"edge2\" class=\"edge\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M35.0373,-111.3792C44.8579,-112.6811 54,-110.5547 54,-105 54,-100.834 48.8576,-98.5964 42.1433,-98.2872\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"35.0373,-98.6208 41.8818,-95.1459 38.5335,-98.4566 42.0296,-98.2924 42.0296,-98.2924 42.0296,-98.2924 38.5335,-98.4566 42.1774,-101.439 35.0373,-98.6208 35.0373,-98.6208\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"54\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1 -->\n",
|
|
"<g id=\"node3\" class=\"node\">\n",
|
|
"<title>1</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"18\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"13.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->1 -->\n",
|
|
"<g id=\"edge3\" class=\"edge\">\n",
|
|
"<title>0->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M18,-86.9735C18,-74.2586 18,-57.0603 18,-43.0183\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"18,-36.0034 21.1501,-43.0033 18,-39.5034 18.0001,-43.0034 18.0001,-43.0034 18.0001,-43.0034 18,-39.5034 14.8501,-43.0034 18,-36.0034 18,-36.0034\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"18\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g id=\"edge4\" class=\"edge\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M34.6641,-25.3828C44.625,-27.0234 54,-24.5625 54,-18 54,-13.0781 48.7266,-10.4634 41.8876,-10.1558\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"34.6641,-10.6172 41.449,-7.0273 38.1569,-10.394 41.6498,-10.1709 41.6498,-10.1709 41.6498,-10.1709 38.1569,-10.394 41.8507,-13.3145 34.6641,-10.6172 34.6641,-10.6172\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"58.5\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
|
"<text text-anchor=\"start\" x=\"54\" y=\"-6.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg>\n",
|
|
"</div><div style='vertical-align:text-top;display:inline-block;'><?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.40.1 (20161225.0304)\n",
|
|
" -->\n",
|
|
"<!-- Pages: 1 -->\n",
|
|
"<svg width=\"208pt\" height=\"220pt\"\n",
|
|
" viewBox=\"0.00 0.00 208.02 220.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 1) rotate(0) translate(4 216)\">\n",
|
|
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-216 204.0193,-216 204.0193,4 -4,4\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"53.0096\" y=\"-197.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">Inf(</text>\n",
|
|
"<text text-anchor=\"start\" x=\"75.0096\" y=\"-197.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"91.0096\" y=\"-197.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)&Inf(</text>\n",
|
|
"<text text-anchor=\"start\" x=\"127.0096\" y=\"-197.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"143.0096\" y=\"-197.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)</text>\n",
|
|
"<text text-anchor=\"start\" x=\"56.0096\" y=\"-183.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">[gen. Büchi 2]</text>\n",
|
|
"<!-- I -->\n",
|
|
"<!-- 0 -->\n",
|
|
"<g id=\"node2\" class=\"node\">\n",
|
|
"<title>0</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"68.0193\" cy=\"-120\" rx=\"18\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"68.0193\" y=\"-116.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">0</text>\n",
|
|
"</g>\n",
|
|
"<!-- I->0 -->\n",
|
|
"<g id=\"edge1\" class=\"edge\">\n",
|
|
"<title>I->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M68.0193,-174.8767C68.0193,-171.822 68.0193,-158.0552 68.0193,-145.0759\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"68.0193,-138.0193 71.1694,-145.0192 68.0193,-141.5193 68.0194,-145.0193 68.0194,-145.0193 68.0194,-145.0193 68.0193,-141.5193 64.8694,-145.0193 68.0193,-138.0193 68.0193,-138.0193\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g id=\"edge2\" class=\"edge\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M85.801,-123.2357C95.3342,-123.7856 104.0193,-122.707 104.0193,-120 104.0193,-118.012 99.3354,-116.9023 93.0714,-116.6708\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"85.801,-116.7643 92.7599,-113.5244 89.3007,-116.7192 92.8004,-116.6742 92.8004,-116.6742 92.8004,-116.6742 89.3007,-116.7192 92.841,-119.8239 85.801,-116.7643 85.801,-116.7643\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"104.0193\" y=\"-123.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"114.5193\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g id=\"edge3\" class=\"edge\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M85.5885,-124.845C108.7793,-128.5056 141.0193,-126.8906 141.0193,-120 141.0193,-113.7823 114.7687,-111.8601 92.6031,-114.2335\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"85.5885,-115.155 92.1185,-111.12 89.0587,-114.6991 92.5288,-114.2432 92.5288,-114.2432 92.5288,-114.2432 89.0587,-114.6991 92.9392,-117.3663 85.5885,-115.155 85.5885,-115.155\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"152.5193\" y=\"-123.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">b</text>\n",
|
|
"<text text-anchor=\"start\" x=\"141.0193\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"157.0193\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1 -->\n",
|
|
"<g id=\"node3\" class=\"node\">\n",
|
|
"<title>1</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"68.0193\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"68.0193\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->1 -->\n",
|
|
"<g id=\"edge4\" class=\"edge\">\n",
|
|
"<title>0->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M50.3286,-115.3021C35.307,-110.2732 14.6933,-100.6701 5.0193,-84 -1.6731,-72.4679 -1.6731,-65.5321 5.0193,-54 13.3329,-39.6741 29.7258,-30.5674 43.7056,-25.0978\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"50.3286,-22.6979 44.8205,-28.0443 47.0379,-23.8903 43.7473,-25.0827 43.7473,-25.0827 43.7473,-25.0827 47.0379,-23.8903 42.6741,-22.1211 50.3286,-22.6979 50.3286,-22.6979\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"5.0193\" y=\"-65.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g id=\"edge5\" class=\"edge\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M68.0193,-36.0777C68.0193,-52.2729 68.0193,-76.2033 68.0193,-94.3707\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"68.0193,-101.7644 64.8694,-94.7644 68.0193,-98.2644 68.0194,-94.7644 68.0194,-94.7644 68.0194,-94.7644 68.0193,-98.2644 71.1694,-94.7645 68.0193,-101.7644 68.0193,-101.7644\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"68.0193\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"78.5193\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g id=\"edge6\" class=\"edge\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M83.5721,-27.9858C91.923,-34.3143 101.423,-43.3143 106.0193,-54 111.2877,-66.2483 111.2877,-71.7517 106.0193,-84 102.4285,-92.3482 95.8446,-99.6675 89.154,-105.4879\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"83.5721,-110.0142 87.0252,-103.1586 86.2906,-107.8098 89.0092,-105.6053 89.0092,-105.6053 89.0092,-105.6053 86.2906,-107.8098 90.9932,-108.052 83.5721,-110.0142 83.5721,-110.0142\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"109.0193\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"110.0193\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"126.0193\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g id=\"edge7\" class=\"edge\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M85.801,-22.4941C95.3342,-23.2578 104.0193,-21.7598 104.0193,-18 104.0193,-15.2389 99.3354,-13.6976 93.0714,-13.3761\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"85.801,-13.5059 92.7436,-10.2313 89.3004,-13.4434 92.7999,-13.3808 92.7999,-13.3808 92.7999,-13.3808 89.3004,-13.4434 92.8562,-16.5303 85.801,-13.5059 85.801,-13.5059\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"104.0193\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g id=\"edge8\" class=\"edge\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M85.0367,-24.4905C109.3677,-29.8803 145.0193,-27.7168 145.0193,-18 145.0193,-9.1942 115.7391,-6.5917 92.1396,-10.1928\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"85.0367,-11.5095 91.3452,-7.1363 88.4781,-10.8715 91.9194,-10.2335 91.9194,-10.2335 91.9194,-10.2335 88.4781,-10.8715 92.4936,-13.3307 85.0367,-11.5095 85.0367,-11.5095\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"145.0193\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"155.5193\" y=\"-6.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg>\n",
|
|
"</div><div style='vertical-align:text-top;display:inline-block;'><?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.40.1 (20161225.0304)\n",
|
|
" -->\n",
|
|
"<!-- Pages: 1 -->\n",
|
|
"<svg width=\"437pt\" height=\"360pt\"\n",
|
|
" viewBox=\"0.00 0.00 436.74 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(.8491 .8491) rotate(0) translate(4 420)\">\n",
|
|
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-420 510.3834,-420 510.3834,4 -4,4\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"180.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">Inf(</text>\n",
|
|
"<text text-anchor=\"start\" x=\"202.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"218.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)&Inf(</text>\n",
|
|
"<text text-anchor=\"start\" x=\"254.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"270.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)&Inf(</text>\n",
|
|
"<text text-anchor=\"start\" x=\"306.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"<text text-anchor=\"start\" x=\"322.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)</text>\n",
|
|
"<text text-anchor=\"start\" x=\"209.1917\" y=\"-387.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">[gen. Büchi 3]</text>\n",
|
|
"<!-- I -->\n",
|
|
"<!-- 0 -->\n",
|
|
"<g id=\"node2\" class=\"node\">\n",
|
|
"<title>0</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"274.3834\" cy=\"-324\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"264.3834\" y=\"-320.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">0,0</text>\n",
|
|
"</g>\n",
|
|
"<!-- I->0 -->\n",
|
|
"<g id=\"edge1\" class=\"edge\">\n",
|
|
"<title>I->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M274.3834,-378.8767C274.3834,-375.822 274.3834,-362.0552 274.3834,-349.0759\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"274.3834,-342.0193 277.5335,-349.0192 274.3835,-345.5193 274.3835,-349.0193 274.3835,-349.0193 274.3835,-349.0193 274.3835,-345.5193 271.2335,-349.0193 274.3834,-342.0193 274.3834,-342.0193\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g id=\"edge2\" class=\"edge\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M301.1783,-327.3676C311.1638,-327.478 319.3834,-326.3555 319.3834,-324 319.3834,-322.2334 314.7599,-321.1603 308.2355,-320.7808\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"301.1783,-320.6324 308.243,-317.6303 304.6775,-320.706 308.1768,-320.7796 308.1768,-320.7796 308.1768,-320.7796 304.6775,-320.706 308.1105,-323.9289 301.1783,-320.6324 301.1783,-320.6324\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"319.3834\" y=\"-327.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"329.8834\" y=\"-312.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g id=\"edge3\" class=\"edge\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M300.1818,-329.5486C325.5521,-332.248 356.3834,-330.3984 356.3834,-324 356.3834,-318.2014 331.062,-316.1388 307.4313,-317.8121\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"300.1818,-318.4514 306.878,-314.6986 303.6682,-318.1439 307.1547,-317.8364 307.1547,-317.8364 307.1547,-317.8364 303.6682,-318.1439 307.4314,-320.9742 300.1818,-318.4514 300.1818,-318.4514\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"367.8834\" y=\"-327.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">b</text>\n",
|
|
"<text text-anchor=\"start\" x=\"356.3834\" y=\"-313.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"372.3834\" y=\"-313.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1 -->\n",
|
|
"<g id=\"node3\" class=\"node\">\n",
|
|
"<title>1</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"122.3834\" cy=\"-222\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"112.3834\" y=\"-218.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">0,1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->1 -->\n",
|
|
"<g id=\"edge4\" class=\"edge\">\n",
|
|
"<title>0->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M247.6703,-321.2683C209.362,-316.7539 141.7338,-306.3598 126.3834,-288 117.1265,-276.9283 115.9969,-260.8138 117.2445,-247.2797\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"118.1458,-240.0746 120.4025,-247.4114 117.7113,-243.5475 117.2769,-247.0205 117.2769,-247.0205 117.2769,-247.0205 117.7113,-243.5475 114.1512,-246.6295 118.1458,-240.0746 118.1458,-240.0746\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"126.3834\" y=\"-269.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2 -->\n",
|
|
"<g id=\"node4\" class=\"node\">\n",
|
|
"<title>2</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"211.3834\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"201.3834\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1,0</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->2 -->\n",
|
|
"<g id=\"edge5\" class=\"edge\">\n",
|
|
"<title>0->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M293.0541,-310.632C312.7641,-295.5852 343.4155,-269.3727 361.3834,-240 394.1866,-186.3758 418.6507,-159.1107 392.3834,-102 366.81,-46.3976 290.3344,-27.5337 245.3905,-21.1817\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"238.1918,-20.233 245.5434,-18.0247 241.6618,-20.6904 245.1318,-21.1477 245.1318,-21.1477 245.1318,-21.1477 241.6618,-20.6904 244.7202,-24.2707 238.1918,-20.233 238.1918,-20.233\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"402.3834\" y=\"-174.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"425.3834\" y=\"-159.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->2 -->\n",
|
|
"<g id=\"edge6\" class=\"edge\">\n",
|
|
"<title>0->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M299.1526,-316.5334C358.3452,-297.1836 500.7616,-240.9279 468.3834,-156 446.7415,-99.233 429.8641,-84.6047 377.3834,-54 355.2288,-41.0803 286.5471,-29.0979 244.7908,-22.7433\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"237.8284,-21.6979 245.2186,-19.6223 241.2896,-22.2176 244.7508,-22.7374 244.7508,-22.7374 244.7508,-22.7374 241.2896,-22.2176 244.283,-25.8525 237.8284,-21.6979 237.8284,-21.6979\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"472.3834\" y=\"-174.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b</text>\n",
|
|
"<text text-anchor=\"start\" x=\"473.3834\" y=\"-160.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"489.3834\" y=\"-160.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3 -->\n",
|
|
"<g id=\"node5\" class=\"node\">\n",
|
|
"<title>3</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"192.3834\" cy=\"-120\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"182.3834\" y=\"-116.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1,1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->3 -->\n",
|
|
"<g id=\"edge7\" class=\"edge\">\n",
|
|
"<title>0->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M280.933,-306.2959C282.7518,-300.5434 284.4759,-294.0757 285.3834,-288 294.1593,-229.2474 300.5748,-203.1071 264.3834,-156 254.5055,-143.1427 238.7934,-134.5453 224.5639,-128.9874\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"217.7296,-126.4977 225.385,-125.9341 221.0182,-127.6958 224.3068,-128.8938 224.3068,-128.8938 224.3068,-128.8938 221.0182,-127.6958 223.2286,-131.8535 217.7296,-126.4977 217.7296,-126.4977\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"291.3834\" y=\"-218.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g id=\"edge8\" class=\"edge\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M141.1159,-235.4971C149.5127,-241.914 159.3185,-249.935 167.3834,-258 179.4573,-270.0738 177.8178,-277.6304 191.3834,-288 206.6698,-299.6848 226.3318,-308.4301 242.6815,-314.3735\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"249.4633,-316.7495 241.8155,-317.4077 246.1602,-315.5922 242.857,-314.4349 242.857,-314.4349 242.857,-314.4349 246.1602,-315.5922 243.8986,-311.4621 249.4633,-316.7495 249.4633,-316.7495\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"191.3834\" y=\"-276.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"201.8834\" y=\"-261.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g id=\"edge9\" class=\"edge\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M148.9617,-226.2063C171.8304,-230.8831 204.7725,-240.2456 228.3834,-258 232.5591,-261.1399 247.5676,-283.1556 259.3195,-300.9097\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"263.4758,-307.215 256.9932,-303.1041 261.5495,-304.2927 259.6232,-301.3704 259.6232,-301.3704 259.6232,-301.3704 261.5495,-304.2927 262.2533,-299.6368 263.4758,-307.215 263.4758,-307.215\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"249.3834\" y=\"-276.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"250.3834\" y=\"-262.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"266.3834\" y=\"-262.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g id=\"edge10\" class=\"edge\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M148.73,-226.6692C158.9166,-226.8767 167.3834,-225.3203 167.3834,-222 167.3834,-219.5098 162.6209,-218.0117 155.9421,-217.5059\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"148.73,-217.3308 155.8045,-214.3517 152.229,-217.4158 155.728,-217.5008 155.728,-217.5008 155.728,-217.5008 152.229,-217.4158 155.6515,-220.6499 148.73,-217.3308 148.73,-217.3308\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"167.3834\" y=\"-218.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g id=\"edge11\" class=\"edge\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M147.251,-229.4501C174.0704,-233.5654 208.3834,-231.082 208.3834,-222 208.3834,-213.6985 179.7145,-210.9102 154.3048,-213.6351\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"147.251,-214.5499 153.7877,-210.5257 150.7219,-214.0997 154.1928,-213.6496 154.1928,-213.6496 154.1928,-213.6496 150.7219,-214.0997 154.598,-216.7734 147.251,-214.5499 147.251,-214.5499\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"208.3834\" y=\"-225.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"218.8834\" y=\"-210.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->2 -->\n",
|
|
"<g id=\"edge12\" class=\"edge\">\n",
|
|
"<title>1->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M99.22,-212.5175C58.1768,-194.2134 -20.6549,-151.4268 5.3834,-102 22.9655,-68.6251 41.0935,-69.7229 75.3834,-54 108.7449,-38.7029 149.7991,-28.9604 178.0208,-23.5221\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"184.9068,-22.2315 178.6069,-26.6172 181.4667,-22.8763 178.0266,-23.5211 178.0266,-23.5211 178.0266,-23.5211 181.4667,-22.8763 177.4463,-20.425 184.9068,-22.2315 184.9068,-22.2315\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"5.3834\" y=\"-123.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"28.3834\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->2 -->\n",
|
|
"<g id=\"edge13\" class=\"edge\">\n",
|
|
"<title>1->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M114.385,-204.6403C100.0334,-170.5938 74.9053,-94.8285 114.3834,-54 131.0257,-36.7885 156.6324,-27.7406 177.3578,-23.0212\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"184.4624,-21.5261 178.2611,-26.0502 181.0374,-22.2469 177.6124,-22.9677 177.6124,-22.9677 177.6124,-22.9677 181.0374,-22.2469 176.9637,-19.8852 184.4624,-21.5261 184.4624,-21.5261\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"95.3834\" y=\"-123.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"108.3834\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"124.3834\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->3 -->\n",
|
|
"<g id=\"edge14\" class=\"edge\">\n",
|
|
"<title>1->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M146.9525,-214.2558C160.5684,-208.6398 176.496,-199.6049 185.3834,-186 193.1995,-174.0351 195.0851,-158.1714 194.9519,-144.9955\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"194.6952,-137.9939 198.0997,-144.8737 194.8235,-141.4915 194.9518,-144.9892 194.9518,-144.9892 194.9518,-144.9892 194.8235,-141.4915 191.8039,-145.1047 194.6952,-137.9939 194.6952,-137.9939\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"194.3834\" y=\"-167.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->3 -->\n",
|
|
"<g id=\"edge15\" class=\"edge\">\n",
|
|
"<title>1->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M116.4458,-204.3686C112.8224,-190.2225 110.4191,-170.4159 119.3834,-156 121.992,-151.8051 143.5296,-141.4526 162.5399,-132.9206\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"169.3895,-129.8743 164.2736,-135.5971 166.1915,-131.2966 162.9935,-132.7188 162.9935,-132.7188 162.9935,-132.7188 166.1915,-131.2966 161.7135,-129.8406 169.3895,-129.8743 169.3895,-129.8743\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"119.3834\" y=\"-174.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"142.3834\" y=\"-159.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2->2 -->\n",
|
|
"<g id=\"edge16\" class=\"edge\">\n",
|
|
"<title>2->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M237.73,-22.6692C247.9166,-22.8767 256.3834,-21.3203 256.3834,-18 256.3834,-15.5098 251.6209,-14.0117 244.9421,-13.5059\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"237.73,-13.3308 244.8045,-10.3517 241.229,-13.4158 244.728,-13.5008 244.728,-13.5008 244.728,-13.5008 241.229,-13.4158 244.6515,-16.6499 237.73,-13.3308 237.73,-13.3308\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"256.3834\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"271.3834\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"287.3834\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2->2 -->\n",
|
|
"<g id=\"edge17\" class=\"edge\">\n",
|
|
"<title>2->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M236.4465,-24.9574C269.5032,-29.743 318.3834,-27.4238 318.3834,-18 318.3834,-9.2388 276.1353,-6.6183 243.6316,-10.1385\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"236.4465,-11.0426 242.9984,-7.0432 239.9191,-10.6056 243.3917,-10.1686 243.3917,-10.1686 243.3917,-10.1686 239.9191,-10.6056 243.785,-13.2939 236.4465,-11.0426 236.4465,-11.0426\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"325.3834\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b</text>\n",
|
|
"<text text-anchor=\"start\" x=\"318.3834\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"334.3834\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"350.3834\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2->3 -->\n",
|
|
"<g id=\"edge18\" class=\"edge\">\n",
|
|
"<title>2->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M184.4642,-21.0648C163.9168,-24.9743 136.9085,-33.854 123.3834,-54 115.9516,-65.07 116.4717,-72.598 123.3834,-84 125.8007,-87.9876 145.6752,-98.1429 163.4765,-106.6546\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"169.9049,-109.7016 162.2303,-109.5498 166.7422,-108.2025 163.5795,-106.7033 163.5795,-106.7033 163.5795,-106.7033 166.7422,-108.2025 164.9287,-103.8569 169.9049,-109.7016 169.9049,-109.7016\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"123.3834\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"148.3834\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->2 -->\n",
|
|
"<g id=\"edge19\" class=\"edge\">\n",
|
|
"<title>3->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M195.7803,-101.7644C198.8334,-85.3742 203.3449,-61.1544 206.7325,-42.9685\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"208.016,-36.0777 209.8308,-43.5362 207.3751,-39.5185 206.7341,-42.9593 206.7341,-42.9593 206.7341,-42.9593 207.3751,-39.5185 203.6373,-42.3824 208.016,-36.0777 208.016,-36.0777\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"203.3834\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"218.3834\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"234.3834\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->2 -->\n",
|
|
"<g id=\"edge20\" class=\"edge\">\n",
|
|
"<title>3->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M218.6531,-115.26C236.303,-110.5624 258.2917,-101.4298 269.3834,-84 276.5418,-72.7512 275.8651,-65.6518 269.3834,-54 263.3719,-43.1933 252.6252,-35.2153 242.0022,-29.5555\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"235.4472,-26.3264 243.1187,-26.594 238.5869,-27.8731 241.7266,-29.4198 241.7266,-29.4198 241.7266,-29.4198 238.5869,-27.8731 240.3346,-32.2455 235.4472,-26.3264 235.4472,-26.3264\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"274.3834\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"279.3834\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"295.3834\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"311.3834\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->3 -->\n",
|
|
"<g id=\"edge21\" class=\"edge\">\n",
|
|
"<title>3->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M218.73,-124.6692C228.9166,-124.8767 237.3834,-123.3203 237.3834,-120 237.3834,-117.5098 232.6209,-116.0117 225.9421,-115.5059\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"218.73,-115.3308 225.8045,-112.3517 222.229,-115.4158 225.728,-115.5008 225.728,-115.5008 225.728,-115.5008 222.229,-115.4158 225.6515,-118.6499 218.73,-115.3308 218.73,-115.3308\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"237.3834\" y=\"-123.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"262.3834\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->3 -->\n",
|
|
"<g id=\"edge22\" class=\"edge\">\n",
|
|
"<title>3->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M217.5241,-126.8825C251.6983,-131.7668 303.3834,-129.4727 303.3834,-120 303.3834,-111.1564 258.3348,-108.5695 224.5437,-112.2394\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"217.5241,-113.1175 224.079,-109.1229 220.9971,-112.683 224.47,-112.2486 224.47,-112.2486 224.47,-112.2486 220.9971,-112.683 224.861,-115.3742 217.5241,-113.1175 217.5241,-113.1175\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"303.3834\" y=\"-123.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"318.3834\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"334.3834\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
"<IPython.core.display.HTML object>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"a1 = spot.translate('FGa')\n",
|
|
"a2 = spot.translate('G(Fc U b)')\n",
|
|
"prod = spot.product(a1, a2)\n",
|
|
"display_inline(a1, a2, prod)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"The builtin `spot.product()` function produces an automaton whose language is the intersection of the two input languages. It does so by building an automaton that keeps track of the runs in the two input automata. The states are labeled by pairs of input states so that we can more easily follow what is going on, but those labels are purely cosmetic. The acceptance condition is the conjunction of the two acceptance condition, but the acceptance sets of one input automaton have been shifted to not conflict with the other automaton.\n",
|
|
"\n",
|
|
"In fact, that automaton printer has an option to shift those sets in its output, and this is perfect for illustrating products. For instance `a.show('+3')` will display `a1` with all its acceptance sets shifted by 3. \n",
|
|
"\n",
|
|
"Let's define a function for displaying the three automata involved in a product, using this shift option so we can follow what is going on with the acceptance sets."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div style='vertical-align:text-top;display:inline-block;'><?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.40.1 (20161225.0304)\n",
|
|
" -->\n",
|
|
"<!-- Pages: 1 -->\n",
|
|
"<svg width=\"78pt\" height=\"205pt\"\n",
|
|
" viewBox=\"0.00 0.00 78.00 205.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 1) rotate(0) translate(4 201)\">\n",
|
|
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-201 74,-201 74,4 -4,4\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"14\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">Inf(</text>\n",
|
|
"<text text-anchor=\"start\" x=\"36\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"52\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)</text>\n",
|
|
"<text text-anchor=\"start\" x=\"12\" y=\"-168.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">[Büchi]</text>\n",
|
|
"<!-- I -->\n",
|
|
"<!-- 0 -->\n",
|
|
"<g id=\"node2\" class=\"node\">\n",
|
|
"<title>0</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"18\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"18\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">0</text>\n",
|
|
"</g>\n",
|
|
"<!-- I->0 -->\n",
|
|
"<g id=\"edge1\" class=\"edge\">\n",
|
|
"<title>I->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M18,-159.8767C18,-156.822 18,-143.0552 18,-130.0759\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"18,-123.0193 21.1501,-130.0192 18,-126.5193 18.0001,-130.0193 18.0001,-130.0193 18.0001,-130.0193 18,-126.5193 14.8501,-130.0193 18,-123.0193 18,-123.0193\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g id=\"edge2\" class=\"edge\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M35.0373,-111.3792C44.8579,-112.6811 54,-110.5547 54,-105 54,-100.834 48.8576,-98.5964 42.1433,-98.2872\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"35.0373,-98.6208 41.8818,-95.1459 38.5335,-98.4566 42.0296,-98.2924 42.0296,-98.2924 42.0296,-98.2924 38.5335,-98.4566 42.1774,-101.439 35.0373,-98.6208 35.0373,-98.6208\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"54\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1 -->\n",
|
|
"<g id=\"node3\" class=\"node\">\n",
|
|
"<title>1</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"18\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"13.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->1 -->\n",
|
|
"<g id=\"edge3\" class=\"edge\">\n",
|
|
"<title>0->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M18,-86.9735C18,-74.2586 18,-57.0603 18,-43.0183\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"18,-36.0034 21.1501,-43.0033 18,-39.5034 18.0001,-43.0034 18.0001,-43.0034 18.0001,-43.0034 18,-39.5034 14.8501,-43.0034 18,-36.0034 18,-36.0034\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"18\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g id=\"edge4\" class=\"edge\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M34.6641,-25.3828C44.625,-27.0234 54,-24.5625 54,-18 54,-13.0781 48.7266,-10.4634 41.8876,-10.1558\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"34.6641,-10.6172 41.449,-7.0273 38.1569,-10.394 41.6498,-10.1709 41.6498,-10.1709 41.6498,-10.1709 38.1569,-10.394 41.8507,-13.3145 34.6641,-10.6172 34.6641,-10.6172\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"58.5\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
|
"<text text-anchor=\"start\" x=\"54\" y=\"-6.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg>\n",
|
|
"</div><div style='vertical-align:text-top;display:inline-block;'><svg height=\"220pt\" viewBox=\"0.00 0.00 208.02 220.00\" width=\"208pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
|
|
"<g class=\"graph\" id=\"graph0\" transform=\"scale(1 1) rotate(0) translate(4 216)\">\n",
|
|
"<polygon fill=\"#ffffff\" points=\"-4,4 -4,-216 204.0193,-216 204.0193,4 -4,4\" stroke=\"transparent\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"53.0096\" y=\"-197.8\">Inf(</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"75.0096\" y=\"-197.8\">❶</text>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"91.0096\" y=\"-197.8\">)&Inf(</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"127.0096\" y=\"-197.8\">❷</text>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"143.0096\" y=\"-197.8\">)</text>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"56.0096\" y=\"-183.8\">[gen. Büchi 2]</text>\n",
|
|
"<!-- I -->\n",
|
|
"<!-- 0 -->\n",
|
|
"<g class=\"node\" id=\"node2\">\n",
|
|
"<title>0</title>\n",
|
|
"<ellipse cx=\"68.0193\" cy=\"-120\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"68.0193\" y=\"-116.3\">0</text>\n",
|
|
"</g>\n",
|
|
"<!-- I->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge1\">\n",
|
|
"<title>I->0</title>\n",
|
|
"<path d=\"M68.0193,-174.8767C68.0193,-171.822 68.0193,-158.0552 68.0193,-145.0759\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"68.0193,-138.0193 71.1694,-145.0192 68.0193,-141.5193 68.0194,-145.0193 68.0194,-145.0193 68.0194,-145.0193 68.0193,-141.5193 64.8694,-145.0193 68.0193,-138.0193 68.0193,-138.0193\" stroke=\"#000000\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge2\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path d=\"M85.801,-123.2357C95.3342,-123.7856 104.0193,-122.707 104.0193,-120 104.0193,-118.012 99.3354,-116.9023 93.0714,-116.6708\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"85.801,-116.7643 92.7599,-113.5244 89.3007,-116.7192 92.8004,-116.6742 92.8004,-116.6742 92.8004,-116.6742 89.3007,-116.7192 92.841,-119.8239 85.801,-116.7643 85.801,-116.7643\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"104.0193\" y=\"-123.8\">!b & c</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"114.5193\" y=\"-108.8\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge3\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path d=\"M85.5885,-124.845C108.7793,-128.5056 141.0193,-126.8906 141.0193,-120 141.0193,-113.7823 114.7687,-111.8601 92.6031,-114.2335\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"85.5885,-115.155 92.1185,-111.12 89.0587,-114.6991 92.5288,-114.2432 92.5288,-114.2432 92.5288,-114.2432 89.0587,-114.6991 92.9392,-117.3663 85.5885,-115.155 85.5885,-115.155\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"152.5193\" y=\"-123.8\">b</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"141.0193\" y=\"-109.8\">❶</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"157.0193\" y=\"-109.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1 -->\n",
|
|
"<g class=\"node\" id=\"node3\">\n",
|
|
"<title>1</title>\n",
|
|
"<ellipse cx=\"68.0193\" cy=\"-18\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"68.0193\" y=\"-14.3\">1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->1 -->\n",
|
|
"<g class=\"edge\" id=\"edge4\">\n",
|
|
"<title>0->1</title>\n",
|
|
"<path d=\"M50.3286,-115.3021C35.307,-110.2732 14.6933,-100.6701 5.0193,-84 -1.6731,-72.4679 -1.6731,-65.5321 5.0193,-54 13.3329,-39.6741 29.7258,-30.5674 43.7056,-25.0978\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"50.3286,-22.6979 44.8205,-28.0443 47.0379,-23.8903 43.7473,-25.0827 43.7473,-25.0827 43.7473,-25.0827 47.0379,-23.8903 42.6741,-22.1211 50.3286,-22.6979 50.3286,-22.6979\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"5.0193\" y=\"-65.3\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge5\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path d=\"M68.0193,-36.0777C68.0193,-52.2729 68.0193,-76.2033 68.0193,-94.3707\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"68.0193,-101.7644 64.8694,-94.7644 68.0193,-98.2644 68.0194,-94.7644 68.0194,-94.7644 68.0194,-94.7644 68.0193,-98.2644 71.1694,-94.7645 68.0193,-101.7644 68.0193,-101.7644\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"68.0193\" y=\"-72.8\">!b & c</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"78.5193\" y=\"-57.8\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge6\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path d=\"M83.5721,-27.9858C91.923,-34.3143 101.423,-43.3143 106.0193,-54 111.2877,-66.2483 111.2877,-71.7517 106.0193,-84 102.4285,-92.3482 95.8446,-99.6675 89.154,-105.4879\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"83.5721,-110.0142 87.0252,-103.1586 86.2906,-107.8098 89.0092,-105.6053 89.0092,-105.6053 89.0092,-105.6053 86.2906,-107.8098 90.9932,-108.052 83.5721,-110.0142 83.5721,-110.0142\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"109.0193\" y=\"-72.8\">b & c</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"110.0193\" y=\"-58.8\">❶</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"126.0193\" y=\"-58.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g class=\"edge\" id=\"edge7\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path d=\"M85.801,-22.4941C95.3342,-23.2578 104.0193,-21.7598 104.0193,-18 104.0193,-15.2389 99.3354,-13.6976 93.0714,-13.3761\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"85.801,-13.5059 92.7436,-10.2313 89.3004,-13.4434 92.7999,-13.3808 92.7999,-13.3808 92.7999,-13.3808 89.3004,-13.4434 92.8562,-16.5303 85.801,-13.5059 85.801,-13.5059\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"104.0193\" y=\"-14.3\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g class=\"edge\" id=\"edge8\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path d=\"M85.0367,-24.4905C109.3677,-29.8803 145.0193,-27.7168 145.0193,-18 145.0193,-9.1942 115.7391,-6.5917 92.1396,-10.1928\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"85.0367,-11.5095 91.3452,-7.1363 88.4781,-10.8715 91.9194,-10.2335 91.9194,-10.2335 91.9194,-10.2335 88.4781,-10.8715 92.4936,-13.3307 85.0367,-11.5095 85.0367,-11.5095\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"145.0193\" y=\"-21.8\">b & !c</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"155.5193\" y=\"-6.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg></div><div style='vertical-align:text-top;display:inline-block;'><?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.40.1 (20161225.0304)\n",
|
|
" -->\n",
|
|
"<!-- Pages: 1 -->\n",
|
|
"<svg width=\"437pt\" height=\"360pt\"\n",
|
|
" viewBox=\"0.00 0.00 436.74 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(.8491 .8491) rotate(0) translate(4 420)\">\n",
|
|
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-420 510.3834,-420 510.3834,4 -4,4\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"180.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">Inf(</text>\n",
|
|
"<text text-anchor=\"start\" x=\"202.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"218.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)&Inf(</text>\n",
|
|
"<text text-anchor=\"start\" x=\"254.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"270.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)&Inf(</text>\n",
|
|
"<text text-anchor=\"start\" x=\"306.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"<text text-anchor=\"start\" x=\"322.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)</text>\n",
|
|
"<text text-anchor=\"start\" x=\"209.1917\" y=\"-387.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">[gen. Büchi 3]</text>\n",
|
|
"<!-- I -->\n",
|
|
"<!-- 0 -->\n",
|
|
"<g id=\"node2\" class=\"node\">\n",
|
|
"<title>0</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"274.3834\" cy=\"-324\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"264.3834\" y=\"-320.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">0,0</text>\n",
|
|
"</g>\n",
|
|
"<!-- I->0 -->\n",
|
|
"<g id=\"edge1\" class=\"edge\">\n",
|
|
"<title>I->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M274.3834,-378.8767C274.3834,-375.822 274.3834,-362.0552 274.3834,-349.0759\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"274.3834,-342.0193 277.5335,-349.0192 274.3835,-345.5193 274.3835,-349.0193 274.3835,-349.0193 274.3835,-349.0193 274.3835,-345.5193 271.2335,-349.0193 274.3834,-342.0193 274.3834,-342.0193\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g id=\"edge2\" class=\"edge\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M301.1783,-327.3676C311.1638,-327.478 319.3834,-326.3555 319.3834,-324 319.3834,-322.2334 314.7599,-321.1603 308.2355,-320.7808\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"301.1783,-320.6324 308.243,-317.6303 304.6775,-320.706 308.1768,-320.7796 308.1768,-320.7796 308.1768,-320.7796 304.6775,-320.706 308.1105,-323.9289 301.1783,-320.6324 301.1783,-320.6324\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"319.3834\" y=\"-327.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"329.8834\" y=\"-312.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g id=\"edge3\" class=\"edge\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M300.1818,-329.5486C325.5521,-332.248 356.3834,-330.3984 356.3834,-324 356.3834,-318.2014 331.062,-316.1388 307.4313,-317.8121\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"300.1818,-318.4514 306.878,-314.6986 303.6682,-318.1439 307.1547,-317.8364 307.1547,-317.8364 307.1547,-317.8364 303.6682,-318.1439 307.4314,-320.9742 300.1818,-318.4514 300.1818,-318.4514\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"367.8834\" y=\"-327.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">b</text>\n",
|
|
"<text text-anchor=\"start\" x=\"356.3834\" y=\"-313.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"372.3834\" y=\"-313.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1 -->\n",
|
|
"<g id=\"node3\" class=\"node\">\n",
|
|
"<title>1</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"122.3834\" cy=\"-222\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"112.3834\" y=\"-218.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">0,1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->1 -->\n",
|
|
"<g id=\"edge4\" class=\"edge\">\n",
|
|
"<title>0->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M247.6703,-321.2683C209.362,-316.7539 141.7338,-306.3598 126.3834,-288 117.1265,-276.9283 115.9969,-260.8138 117.2445,-247.2797\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"118.1458,-240.0746 120.4025,-247.4114 117.7113,-243.5475 117.2769,-247.0205 117.2769,-247.0205 117.2769,-247.0205 117.7113,-243.5475 114.1512,-246.6295 118.1458,-240.0746 118.1458,-240.0746\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"126.3834\" y=\"-269.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2 -->\n",
|
|
"<g id=\"node4\" class=\"node\">\n",
|
|
"<title>2</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"211.3834\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"201.3834\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1,0</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->2 -->\n",
|
|
"<g id=\"edge5\" class=\"edge\">\n",
|
|
"<title>0->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M293.0541,-310.632C312.7641,-295.5852 343.4155,-269.3727 361.3834,-240 394.1866,-186.3758 418.6507,-159.1107 392.3834,-102 366.81,-46.3976 290.3344,-27.5337 245.3905,-21.1817\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"238.1918,-20.233 245.5434,-18.0247 241.6618,-20.6904 245.1318,-21.1477 245.1318,-21.1477 245.1318,-21.1477 241.6618,-20.6904 244.7202,-24.2707 238.1918,-20.233 238.1918,-20.233\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"402.3834\" y=\"-174.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"425.3834\" y=\"-159.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->2 -->\n",
|
|
"<g id=\"edge6\" class=\"edge\">\n",
|
|
"<title>0->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M299.1526,-316.5334C358.3452,-297.1836 500.7616,-240.9279 468.3834,-156 446.7415,-99.233 429.8641,-84.6047 377.3834,-54 355.2288,-41.0803 286.5471,-29.0979 244.7908,-22.7433\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"237.8284,-21.6979 245.2186,-19.6223 241.2896,-22.2176 244.7508,-22.7374 244.7508,-22.7374 244.7508,-22.7374 241.2896,-22.2176 244.283,-25.8525 237.8284,-21.6979 237.8284,-21.6979\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"472.3834\" y=\"-174.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b</text>\n",
|
|
"<text text-anchor=\"start\" x=\"473.3834\" y=\"-160.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"489.3834\" y=\"-160.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3 -->\n",
|
|
"<g id=\"node5\" class=\"node\">\n",
|
|
"<title>3</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"192.3834\" cy=\"-120\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"182.3834\" y=\"-116.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1,1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->3 -->\n",
|
|
"<g id=\"edge7\" class=\"edge\">\n",
|
|
"<title>0->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M280.933,-306.2959C282.7518,-300.5434 284.4759,-294.0757 285.3834,-288 294.1593,-229.2474 300.5748,-203.1071 264.3834,-156 254.5055,-143.1427 238.7934,-134.5453 224.5639,-128.9874\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"217.7296,-126.4977 225.385,-125.9341 221.0182,-127.6958 224.3068,-128.8938 224.3068,-128.8938 224.3068,-128.8938 221.0182,-127.6958 223.2286,-131.8535 217.7296,-126.4977 217.7296,-126.4977\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"291.3834\" y=\"-218.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g id=\"edge8\" class=\"edge\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M141.1159,-235.4971C149.5127,-241.914 159.3185,-249.935 167.3834,-258 179.4573,-270.0738 177.8178,-277.6304 191.3834,-288 206.6698,-299.6848 226.3318,-308.4301 242.6815,-314.3735\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"249.4633,-316.7495 241.8155,-317.4077 246.1602,-315.5922 242.857,-314.4349 242.857,-314.4349 242.857,-314.4349 246.1602,-315.5922 243.8986,-311.4621 249.4633,-316.7495 249.4633,-316.7495\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"191.3834\" y=\"-276.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"201.8834\" y=\"-261.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g id=\"edge9\" class=\"edge\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M148.9617,-226.2063C171.8304,-230.8831 204.7725,-240.2456 228.3834,-258 232.5591,-261.1399 247.5676,-283.1556 259.3195,-300.9097\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"263.4758,-307.215 256.9932,-303.1041 261.5495,-304.2927 259.6232,-301.3704 259.6232,-301.3704 259.6232,-301.3704 261.5495,-304.2927 262.2533,-299.6368 263.4758,-307.215 263.4758,-307.215\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"249.3834\" y=\"-276.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"250.3834\" y=\"-262.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"266.3834\" y=\"-262.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g id=\"edge10\" class=\"edge\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M148.73,-226.6692C158.9166,-226.8767 167.3834,-225.3203 167.3834,-222 167.3834,-219.5098 162.6209,-218.0117 155.9421,-217.5059\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"148.73,-217.3308 155.8045,-214.3517 152.229,-217.4158 155.728,-217.5008 155.728,-217.5008 155.728,-217.5008 152.229,-217.4158 155.6515,-220.6499 148.73,-217.3308 148.73,-217.3308\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"167.3834\" y=\"-218.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g id=\"edge11\" class=\"edge\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M147.251,-229.4501C174.0704,-233.5654 208.3834,-231.082 208.3834,-222 208.3834,-213.6985 179.7145,-210.9102 154.3048,-213.6351\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"147.251,-214.5499 153.7877,-210.5257 150.7219,-214.0997 154.1928,-213.6496 154.1928,-213.6496 154.1928,-213.6496 150.7219,-214.0997 154.598,-216.7734 147.251,-214.5499 147.251,-214.5499\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"208.3834\" y=\"-225.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"218.8834\" y=\"-210.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->2 -->\n",
|
|
"<g id=\"edge12\" class=\"edge\">\n",
|
|
"<title>1->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M99.22,-212.5175C58.1768,-194.2134 -20.6549,-151.4268 5.3834,-102 22.9655,-68.6251 41.0935,-69.7229 75.3834,-54 108.7449,-38.7029 149.7991,-28.9604 178.0208,-23.5221\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"184.9068,-22.2315 178.6069,-26.6172 181.4667,-22.8763 178.0266,-23.5211 178.0266,-23.5211 178.0266,-23.5211 181.4667,-22.8763 177.4463,-20.425 184.9068,-22.2315 184.9068,-22.2315\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"5.3834\" y=\"-123.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"28.3834\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->2 -->\n",
|
|
"<g id=\"edge13\" class=\"edge\">\n",
|
|
"<title>1->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M114.385,-204.6403C100.0334,-170.5938 74.9053,-94.8285 114.3834,-54 131.0257,-36.7885 156.6324,-27.7406 177.3578,-23.0212\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"184.4624,-21.5261 178.2611,-26.0502 181.0374,-22.2469 177.6124,-22.9677 177.6124,-22.9677 177.6124,-22.9677 181.0374,-22.2469 176.9637,-19.8852 184.4624,-21.5261 184.4624,-21.5261\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"95.3834\" y=\"-123.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"108.3834\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"124.3834\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->3 -->\n",
|
|
"<g id=\"edge14\" class=\"edge\">\n",
|
|
"<title>1->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M146.9525,-214.2558C160.5684,-208.6398 176.496,-199.6049 185.3834,-186 193.1995,-174.0351 195.0851,-158.1714 194.9519,-144.9955\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"194.6952,-137.9939 198.0997,-144.8737 194.8235,-141.4915 194.9518,-144.9892 194.9518,-144.9892 194.9518,-144.9892 194.8235,-141.4915 191.8039,-145.1047 194.6952,-137.9939 194.6952,-137.9939\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"194.3834\" y=\"-167.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->3 -->\n",
|
|
"<g id=\"edge15\" class=\"edge\">\n",
|
|
"<title>1->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M116.4458,-204.3686C112.8224,-190.2225 110.4191,-170.4159 119.3834,-156 121.992,-151.8051 143.5296,-141.4526 162.5399,-132.9206\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"169.3895,-129.8743 164.2736,-135.5971 166.1915,-131.2966 162.9935,-132.7188 162.9935,-132.7188 162.9935,-132.7188 166.1915,-131.2966 161.7135,-129.8406 169.3895,-129.8743 169.3895,-129.8743\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"119.3834\" y=\"-174.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"142.3834\" y=\"-159.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2->2 -->\n",
|
|
"<g id=\"edge16\" class=\"edge\">\n",
|
|
"<title>2->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M237.73,-22.6692C247.9166,-22.8767 256.3834,-21.3203 256.3834,-18 256.3834,-15.5098 251.6209,-14.0117 244.9421,-13.5059\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"237.73,-13.3308 244.8045,-10.3517 241.229,-13.4158 244.728,-13.5008 244.728,-13.5008 244.728,-13.5008 241.229,-13.4158 244.6515,-16.6499 237.73,-13.3308 237.73,-13.3308\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"256.3834\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"271.3834\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"287.3834\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2->2 -->\n",
|
|
"<g id=\"edge17\" class=\"edge\">\n",
|
|
"<title>2->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M236.4465,-24.9574C269.5032,-29.743 318.3834,-27.4238 318.3834,-18 318.3834,-9.2388 276.1353,-6.6183 243.6316,-10.1385\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"236.4465,-11.0426 242.9984,-7.0432 239.9191,-10.6056 243.3917,-10.1686 243.3917,-10.1686 243.3917,-10.1686 239.9191,-10.6056 243.785,-13.2939 236.4465,-11.0426 236.4465,-11.0426\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"325.3834\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b</text>\n",
|
|
"<text text-anchor=\"start\" x=\"318.3834\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"334.3834\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"350.3834\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2->3 -->\n",
|
|
"<g id=\"edge18\" class=\"edge\">\n",
|
|
"<title>2->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M184.4642,-21.0648C163.9168,-24.9743 136.9085,-33.854 123.3834,-54 115.9516,-65.07 116.4717,-72.598 123.3834,-84 125.8007,-87.9876 145.6752,-98.1429 163.4765,-106.6546\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"169.9049,-109.7016 162.2303,-109.5498 166.7422,-108.2025 163.5795,-106.7033 163.5795,-106.7033 163.5795,-106.7033 166.7422,-108.2025 164.9287,-103.8569 169.9049,-109.7016 169.9049,-109.7016\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"123.3834\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"148.3834\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->2 -->\n",
|
|
"<g id=\"edge19\" class=\"edge\">\n",
|
|
"<title>3->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M195.7803,-101.7644C198.8334,-85.3742 203.3449,-61.1544 206.7325,-42.9685\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"208.016,-36.0777 209.8308,-43.5362 207.3751,-39.5185 206.7341,-42.9593 206.7341,-42.9593 206.7341,-42.9593 207.3751,-39.5185 203.6373,-42.3824 208.016,-36.0777 208.016,-36.0777\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"203.3834\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"218.3834\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"234.3834\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->2 -->\n",
|
|
"<g id=\"edge20\" class=\"edge\">\n",
|
|
"<title>3->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M218.6531,-115.26C236.303,-110.5624 258.2917,-101.4298 269.3834,-84 276.5418,-72.7512 275.8651,-65.6518 269.3834,-54 263.3719,-43.1933 252.6252,-35.2153 242.0022,-29.5555\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"235.4472,-26.3264 243.1187,-26.594 238.5869,-27.8731 241.7266,-29.4198 241.7266,-29.4198 241.7266,-29.4198 238.5869,-27.8731 240.3346,-32.2455 235.4472,-26.3264 235.4472,-26.3264\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"274.3834\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"279.3834\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"295.3834\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"311.3834\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->3 -->\n",
|
|
"<g id=\"edge21\" class=\"edge\">\n",
|
|
"<title>3->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M218.73,-124.6692C228.9166,-124.8767 237.3834,-123.3203 237.3834,-120 237.3834,-117.5098 232.6209,-116.0117 225.9421,-115.5059\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"218.73,-115.3308 225.8045,-112.3517 222.229,-115.4158 225.728,-115.5008 225.728,-115.5008 225.728,-115.5008 222.229,-115.4158 225.6515,-118.6499 218.73,-115.3308 218.73,-115.3308\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"237.3834\" y=\"-123.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"262.3834\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->3 -->\n",
|
|
"<g id=\"edge22\" class=\"edge\">\n",
|
|
"<title>3->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M217.5241,-126.8825C251.6983,-131.7668 303.3834,-129.4727 303.3834,-120 303.3834,-111.1564 258.3348,-108.5695 224.5437,-112.2394\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"217.5241,-113.1175 224.079,-109.1229 220.9971,-112.683 224.47,-112.2486 224.47,-112.2486 224.47,-112.2486 220.9971,-112.683 224.861,-115.3742 217.5241,-113.1175 217.5241,-113.1175\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"303.3834\" y=\"-123.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"318.3834\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"334.3834\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
"<IPython.core.display.HTML object>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"def show_prod(a1, a2, res):\n",
|
|
" s1 = a1.num_sets()\n",
|
|
" display_inline(a1, a2.show('.tvb+{}'.format(s1)), res)\n",
|
|
"\n",
|
|
"show_prod(a1, a2, prod)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Building a product\n",
|
|
"\n",
|
|
"Let's now rewrite `product()` in Python. We will do that in three steps.\n",
|
|
"\n",
|
|
"\n",
|
|
"## First attempt\n",
|
|
"\n",
|
|
"First, we build a product without taking care of the acceptance sets. We just want to get the general shape of the algorithm.\n",
|
|
"\n",
|
|
"We will build an automaton of type `twa_graph`, i.e., an automaton represented explicitely using a graph. In those automata, states are numbered by integers, starting from `0`. (Those states can also be given a different name, which is why the the `product()` shows us something that appears to be labeled by pairs, but the real identifier of each state is an integer.)\n",
|
|
"\n",
|
|
"We will use a dictionary to keep track of the association between a pair `(ls,rs)` of input states, and its number in the output."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div style='vertical-align:text-top;display:inline-block;'><?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.40.1 (20161225.0304)\n",
|
|
" -->\n",
|
|
"<!-- Pages: 1 -->\n",
|
|
"<svg width=\"78pt\" height=\"205pt\"\n",
|
|
" viewBox=\"0.00 0.00 78.00 205.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 1) rotate(0) translate(4 201)\">\n",
|
|
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-201 74,-201 74,4 -4,4\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"14\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">Inf(</text>\n",
|
|
"<text text-anchor=\"start\" x=\"36\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"52\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)</text>\n",
|
|
"<text text-anchor=\"start\" x=\"12\" y=\"-168.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">[Büchi]</text>\n",
|
|
"<!-- I -->\n",
|
|
"<!-- 0 -->\n",
|
|
"<g id=\"node2\" class=\"node\">\n",
|
|
"<title>0</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"18\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"18\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">0</text>\n",
|
|
"</g>\n",
|
|
"<!-- I->0 -->\n",
|
|
"<g id=\"edge1\" class=\"edge\">\n",
|
|
"<title>I->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M18,-159.8767C18,-156.822 18,-143.0552 18,-130.0759\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"18,-123.0193 21.1501,-130.0192 18,-126.5193 18.0001,-130.0193 18.0001,-130.0193 18.0001,-130.0193 18,-126.5193 14.8501,-130.0193 18,-123.0193 18,-123.0193\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g id=\"edge2\" class=\"edge\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M35.0373,-111.3792C44.8579,-112.6811 54,-110.5547 54,-105 54,-100.834 48.8576,-98.5964 42.1433,-98.2872\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"35.0373,-98.6208 41.8818,-95.1459 38.5335,-98.4566 42.0296,-98.2924 42.0296,-98.2924 42.0296,-98.2924 38.5335,-98.4566 42.1774,-101.439 35.0373,-98.6208 35.0373,-98.6208\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"54\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1 -->\n",
|
|
"<g id=\"node3\" class=\"node\">\n",
|
|
"<title>1</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"18\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"13.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->1 -->\n",
|
|
"<g id=\"edge3\" class=\"edge\">\n",
|
|
"<title>0->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M18,-86.9735C18,-74.2586 18,-57.0603 18,-43.0183\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"18,-36.0034 21.1501,-43.0033 18,-39.5034 18.0001,-43.0034 18.0001,-43.0034 18.0001,-43.0034 18,-39.5034 14.8501,-43.0034 18,-36.0034 18,-36.0034\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"18\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g id=\"edge4\" class=\"edge\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M34.6641,-25.3828C44.625,-27.0234 54,-24.5625 54,-18 54,-13.0781 48.7266,-10.4634 41.8876,-10.1558\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"34.6641,-10.6172 41.449,-7.0273 38.1569,-10.394 41.6498,-10.1709 41.6498,-10.1709 41.6498,-10.1709 38.1569,-10.394 41.8507,-13.3145 34.6641,-10.6172 34.6641,-10.6172\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"58.5\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
|
"<text text-anchor=\"start\" x=\"54\" y=\"-6.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg>\n",
|
|
"</div><div style='vertical-align:text-top;display:inline-block;'><svg height=\"220pt\" viewBox=\"0.00 0.00 208.02 220.00\" width=\"208pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
|
|
"<g class=\"graph\" id=\"graph0\" transform=\"scale(1 1) rotate(0) translate(4 216)\">\n",
|
|
"<polygon fill=\"#ffffff\" points=\"-4,4 -4,-216 204.0193,-216 204.0193,4 -4,4\" stroke=\"transparent\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"53.0096\" y=\"-197.8\">Inf(</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"75.0096\" y=\"-197.8\">❶</text>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"91.0096\" y=\"-197.8\">)&Inf(</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"127.0096\" y=\"-197.8\">❷</text>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"143.0096\" y=\"-197.8\">)</text>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"56.0096\" y=\"-183.8\">[gen. Büchi 2]</text>\n",
|
|
"<!-- I -->\n",
|
|
"<!-- 0 -->\n",
|
|
"<g class=\"node\" id=\"node2\">\n",
|
|
"<title>0</title>\n",
|
|
"<ellipse cx=\"68.0193\" cy=\"-120\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"68.0193\" y=\"-116.3\">0</text>\n",
|
|
"</g>\n",
|
|
"<!-- I->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge1\">\n",
|
|
"<title>I->0</title>\n",
|
|
"<path d=\"M68.0193,-174.8767C68.0193,-171.822 68.0193,-158.0552 68.0193,-145.0759\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"68.0193,-138.0193 71.1694,-145.0192 68.0193,-141.5193 68.0194,-145.0193 68.0194,-145.0193 68.0194,-145.0193 68.0193,-141.5193 64.8694,-145.0193 68.0193,-138.0193 68.0193,-138.0193\" stroke=\"#000000\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge2\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path d=\"M85.801,-123.2357C95.3342,-123.7856 104.0193,-122.707 104.0193,-120 104.0193,-118.012 99.3354,-116.9023 93.0714,-116.6708\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"85.801,-116.7643 92.7599,-113.5244 89.3007,-116.7192 92.8004,-116.6742 92.8004,-116.6742 92.8004,-116.6742 89.3007,-116.7192 92.841,-119.8239 85.801,-116.7643 85.801,-116.7643\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"104.0193\" y=\"-123.8\">!b & c</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"114.5193\" y=\"-108.8\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge3\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path d=\"M85.5885,-124.845C108.7793,-128.5056 141.0193,-126.8906 141.0193,-120 141.0193,-113.7823 114.7687,-111.8601 92.6031,-114.2335\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"85.5885,-115.155 92.1185,-111.12 89.0587,-114.6991 92.5288,-114.2432 92.5288,-114.2432 92.5288,-114.2432 89.0587,-114.6991 92.9392,-117.3663 85.5885,-115.155 85.5885,-115.155\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"152.5193\" y=\"-123.8\">b</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"141.0193\" y=\"-109.8\">❶</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"157.0193\" y=\"-109.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1 -->\n",
|
|
"<g class=\"node\" id=\"node3\">\n",
|
|
"<title>1</title>\n",
|
|
"<ellipse cx=\"68.0193\" cy=\"-18\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"68.0193\" y=\"-14.3\">1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->1 -->\n",
|
|
"<g class=\"edge\" id=\"edge4\">\n",
|
|
"<title>0->1</title>\n",
|
|
"<path d=\"M50.3286,-115.3021C35.307,-110.2732 14.6933,-100.6701 5.0193,-84 -1.6731,-72.4679 -1.6731,-65.5321 5.0193,-54 13.3329,-39.6741 29.7258,-30.5674 43.7056,-25.0978\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"50.3286,-22.6979 44.8205,-28.0443 47.0379,-23.8903 43.7473,-25.0827 43.7473,-25.0827 43.7473,-25.0827 47.0379,-23.8903 42.6741,-22.1211 50.3286,-22.6979 50.3286,-22.6979\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"5.0193\" y=\"-65.3\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge5\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path d=\"M68.0193,-36.0777C68.0193,-52.2729 68.0193,-76.2033 68.0193,-94.3707\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"68.0193,-101.7644 64.8694,-94.7644 68.0193,-98.2644 68.0194,-94.7644 68.0194,-94.7644 68.0194,-94.7644 68.0193,-98.2644 71.1694,-94.7645 68.0193,-101.7644 68.0193,-101.7644\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"68.0193\" y=\"-72.8\">!b & c</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"78.5193\" y=\"-57.8\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge6\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path d=\"M83.5721,-27.9858C91.923,-34.3143 101.423,-43.3143 106.0193,-54 111.2877,-66.2483 111.2877,-71.7517 106.0193,-84 102.4285,-92.3482 95.8446,-99.6675 89.154,-105.4879\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"83.5721,-110.0142 87.0252,-103.1586 86.2906,-107.8098 89.0092,-105.6053 89.0092,-105.6053 89.0092,-105.6053 86.2906,-107.8098 90.9932,-108.052 83.5721,-110.0142 83.5721,-110.0142\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"109.0193\" y=\"-72.8\">b & c</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"110.0193\" y=\"-58.8\">❶</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"126.0193\" y=\"-58.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g class=\"edge\" id=\"edge7\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path d=\"M85.801,-22.4941C95.3342,-23.2578 104.0193,-21.7598 104.0193,-18 104.0193,-15.2389 99.3354,-13.6976 93.0714,-13.3761\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"85.801,-13.5059 92.7436,-10.2313 89.3004,-13.4434 92.7999,-13.3808 92.7999,-13.3808 92.7999,-13.3808 89.3004,-13.4434 92.8562,-16.5303 85.801,-13.5059 85.801,-13.5059\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"104.0193\" y=\"-14.3\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g class=\"edge\" id=\"edge8\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path d=\"M85.0367,-24.4905C109.3677,-29.8803 145.0193,-27.7168 145.0193,-18 145.0193,-9.1942 115.7391,-6.5917 92.1396,-10.1928\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"85.0367,-11.5095 91.3452,-7.1363 88.4781,-10.8715 91.9194,-10.2335 91.9194,-10.2335 91.9194,-10.2335 88.4781,-10.8715 92.4936,-13.3307 85.0367,-11.5095 85.0367,-11.5095\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"145.0193\" y=\"-21.8\">b & !c</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"155.5193\" y=\"-6.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg></div><div style='vertical-align:text-top;display:inline-block;'><?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.40.1 (20161225.0304)\n",
|
|
" -->\n",
|
|
"<!-- Pages: 1 -->\n",
|
|
"<svg width=\"469pt\" height=\"360pt\"\n",
|
|
" viewBox=\"0.00 0.00 468.75 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(.9449 .9449) rotate(0) translate(4 377)\">\n",
|
|
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-377 492.0907,-377 492.0907,4 -4,4\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"241.0454\" y=\"-357.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">t</text>\n",
|
|
"<text text-anchor=\"start\" x=\"233.0454\" y=\"-342.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">[all]</text>\n",
|
|
"<!-- I -->\n",
|
|
"<!-- 0 -->\n",
|
|
"<g id=\"node2\" class=\"node\">\n",
|
|
"<title>0</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"269.0907\" cy=\"-279\" rx=\"18\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"269.0907\" y=\"-275.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">0</text>\n",
|
|
"</g>\n",
|
|
"<!-- I->0 -->\n",
|
|
"<g id=\"edge1\" class=\"edge\">\n",
|
|
"<title>I->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M269.0907,-333.8767C269.0907,-330.822 269.0907,-317.0552 269.0907,-304.0759\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"269.0907,-297.0193 272.2408,-304.0192 269.0908,-300.5193 269.0908,-304.0193 269.0908,-304.0193 269.0908,-304.0193 269.0908,-300.5193 265.9408,-304.0193 269.0907,-297.0193 269.0907,-297.0193\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g id=\"edge2\" class=\"edge\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M286.8725,-282.2357C296.4057,-282.7856 305.0907,-281.707 305.0907,-279 305.0907,-277.012 300.4068,-275.9023 294.1428,-275.6708\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"286.8725,-275.7643 293.8313,-272.5244 290.3722,-275.7192 293.8719,-275.6742 293.8719,-275.6742 293.8719,-275.6742 290.3722,-275.7192 293.9124,-278.8239 286.8725,-275.7643 286.8725,-275.7643\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"305.0907\" y=\"-275.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g id=\"edge3\" class=\"edge\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M286.6599,-283.845C309.8507,-287.5056 342.0907,-285.8906 342.0907,-279 342.0907,-272.7823 315.8402,-270.8601 293.6746,-273.2335\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"286.6599,-274.155 293.19,-270.12 290.1301,-273.6991 293.6003,-273.2432 293.6003,-273.2432 293.6003,-273.2432 290.1301,-273.6991 294.0106,-276.3663 286.6599,-274.155 286.6599,-274.155\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"342.0907\" y=\"-275.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">b</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1 -->\n",
|
|
"<g id=\"node3\" class=\"node\">\n",
|
|
"<title>1</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"123.0907\" cy=\"-192\" rx=\"18\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"123.0907\" y=\"-188.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->1 -->\n",
|
|
"<g id=\"edge4\" class=\"edge\">\n",
|
|
"<title>0->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M250.9975,-277.304C215.3142,-273.5455 137.9455,-263.2061 122.0907,-243 116.3105,-235.6334 115.4756,-225.6519 116.487,-216.4722\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"117.6348,-209.3474 119.6313,-216.7594 117.0781,-212.8029 116.5214,-216.2583 116.5214,-216.2583 116.5214,-216.2583 117.0781,-212.8029 113.4115,-215.7573 117.6348,-209.3474 117.6348,-209.3474\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"122.0907\" y=\"-231.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2 -->\n",
|
|
"<g id=\"node4\" class=\"node\">\n",
|
|
"<title>2</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"212.0907\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"212.0907\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">2</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->2 -->\n",
|
|
"<g id=\"edge5\" class=\"edge\">\n",
|
|
"<title>0->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M284.5132,-269.1581C302.0732,-257.1948 330.4715,-235.424 347.0907,-210 377.767,-163.0716 400.694,-136.8777 375.0907,-87 363.6004,-64.6157 351.632,-65.1793 329.0907,-54 298.8955,-39.0247 261.2093,-28.7876 236.9021,-23.1654\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"229.8111,-21.5686 237.3322,-20.0334 233.2256,-22.3375 236.6401,-23.1065 236.6401,-23.1065 236.6401,-23.1065 233.2256,-22.3375 235.9481,-26.1795 229.8111,-21.5686 229.8111,-21.5686\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"384.0907\" y=\"-144.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->2 -->\n",
|
|
"<g id=\"edge6\" class=\"edge\">\n",
|
|
"<title>0->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M286.9252,-274.8202C338.5938,-261.7263 482.6966,-217.737 450.0907,-141 428.0831,-89.2055 407.696,-80.5769 358.0907,-54 319.057,-33.087 267.6514,-24.0825 237.4063,-20.387\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"230.1931,-19.5578 237.5071,-17.2279 233.6702,-19.9576 237.1473,-20.3573 237.1473,-20.3573 237.1473,-20.3573 233.6702,-19.9576 236.7876,-23.4867 230.1931,-19.5578 230.1931,-19.5578\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"454.0907\" y=\"-144.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3 -->\n",
|
|
"<g id=\"node5\" class=\"node\">\n",
|
|
"<title>3</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"184.0907\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"184.0907\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">3</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->3 -->\n",
|
|
"<g id=\"edge7\" class=\"edge\">\n",
|
|
"<title>0->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M274.3575,-261.584C275.8805,-255.7354 277.3351,-249.1383 278.0907,-243 282.7998,-204.7475 262.6312,-144.2317 260.0907,-141 247.4586,-124.931 225.9133,-115.6708 208.9816,-110.5782\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"202.0471,-108.6431 209.6362,-107.4906 205.4183,-109.5838 208.7895,-110.5246 208.7895,-110.5246 208.7895,-110.5246 205.4183,-109.5838 207.9428,-113.5587 202.0471,-108.6431 202.0471,-108.6431\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"277.0907\" y=\"-188.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g id=\"edge8\" class=\"edge\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M136.2987,-204.4877C148.5241,-215.5933 167.5579,-231.7675 186.0907,-243 204.8959,-254.3976 227.9559,-264.0956 244.9929,-270.5443\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"251.8958,-273.1046 244.2372,-273.6237 248.6142,-271.8875 245.3327,-270.6703 245.3327,-270.6703 245.3327,-270.6703 248.6142,-271.8875 246.4281,-267.7169 251.8958,-273.1046 251.8958,-273.1046\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"186.0907\" y=\"-231.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g id=\"edge9\" class=\"edge\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M140.9184,-195.6251C161.9127,-200.4972 197.2003,-210.6189 223.0907,-228 235.0075,-236.0002 245.8881,-247.7529 254.0721,-257.9604\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"258.5666,-263.7518 251.7864,-260.153 256.4208,-260.9867 254.2749,-258.2217 254.2749,-258.2217 254.2749,-258.2217 256.4208,-260.9867 256.7634,-256.2904 258.5666,-263.7518 258.5666,-263.7518\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"240.0907\" y=\"-231.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">b & c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g id=\"edge10\" class=\"edge\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M140.8725,-195.775C150.4057,-196.4165 159.0907,-195.1582 159.0907,-192 159.0907,-189.6807 154.4068,-188.386 148.1428,-188.1159\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"140.8725,-188.225 147.8244,-184.9702 144.3721,-188.1724 147.8717,-188.1199 147.8717,-188.1199 147.8717,-188.1199 144.3721,-188.1724 147.919,-191.2695 140.8725,-188.225 140.8725,-188.225\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"159.0907\" y=\"-188.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g id=\"edge11\" class=\"edge\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M140.4758,-197.5198C164.7966,-201.961 200.0907,-200.1211 200.0907,-192 200.0907,-184.6403 171.1041,-182.4392 147.5673,-185.3967\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"140.4758,-186.4802 146.9197,-182.309 143.9357,-185.9515 147.3955,-185.4229 147.3955,-185.4229 147.3955,-185.4229 143.9357,-185.9515 147.8713,-188.5367 140.4758,-186.4802 140.4758,-186.4802\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"200.0907\" y=\"-188.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->2 -->\n",
|
|
"<g id=\"edge12\" class=\"edge\">\n",
|
|
"<title>1->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M106.0188,-186.2748C66.9274,-172.2077 -23.5069,-133.6748 6.0907,-87 25.968,-55.6539 137.0471,-31.7216 187.3414,-22.3318\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"194.3027,-21.0528 187.9872,-25.416 190.8603,-21.6854 187.4179,-22.3179 187.4179,-22.3179 187.4179,-22.3179 190.8603,-21.6854 186.8486,-19.2197 194.3027,-21.0528 194.3027,-21.0528\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"6.0907\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->2 -->\n",
|
|
"<g id=\"edge13\" class=\"edge\">\n",
|
|
"<title>1->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M114.5237,-175.9005C104.634,-155.2167 90.7367,-118.2525 99.0907,-87 103.4612,-70.6501 105.224,-64.9939 118.0907,-54 138.057,-36.9399 166.9749,-27.5036 187.454,-22.6193\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"194.3172,-21.0764 188.1786,-25.6851 190.9024,-21.8441 187.4877,-22.6118 187.4877,-22.6118 187.4877,-22.6118 190.9024,-21.8441 186.7967,-19.5385 194.3172,-21.0764 194.3172,-21.0764\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"99.0907\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b & c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->3 -->\n",
|
|
"<g id=\"edge14\" class=\"edge\">\n",
|
|
"<title>1->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M140.7814,-187.3021C155.803,-182.2732 176.4167,-172.6701 186.0907,-156 190.6078,-148.2163 191.226,-138.5816 190.3279,-129.7896\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"189.2692,-122.6617 193.4135,-129.123 189.7835,-126.1238 190.2977,-129.5858 190.2977,-129.5858 190.2977,-129.5858 189.7835,-126.1238 187.1819,-130.0486 189.2692,-122.6617 189.2692,-122.6617\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"190.0907\" y=\"-144.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->3 -->\n",
|
|
"<g id=\"edge15\" class=\"edge\">\n",
|
|
"<title>1->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M117.5008,-174.8082C115.1625,-164.3497 114.1802,-151.1062 120.0907,-141 120.1101,-140.9669 143.2898,-127.9328 161.7439,-117.5595\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"168.2774,-113.8872 163.7187,-120.0631 165.2263,-115.6021 162.1752,-117.3171 162.1752,-117.3171 162.1752,-117.3171 165.2263,-115.6021 160.6318,-114.5712 168.2774,-113.8872 168.2774,-113.8872\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"120.0907\" y=\"-144.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2->2 -->\n",
|
|
"<g id=\"edge16\" class=\"edge\">\n",
|
|
"<title>2->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M229.8725,-21.775C239.4057,-22.4165 248.0907,-21.1582 248.0907,-18 248.0907,-15.6807 243.4068,-14.386 237.1428,-14.1159\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"229.8725,-14.225 236.8244,-10.9702 233.3721,-14.1724 236.8717,-14.1199 236.8717,-14.1199 236.8717,-14.1199 233.3721,-14.1724 236.919,-17.2695 229.8725,-14.225 229.8725,-14.225\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"248.0907\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2->2 -->\n",
|
|
"<g id=\"edge17\" class=\"edge\">\n",
|
|
"<title>2->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M229.5437,-23.0988C259.29,-28.0668 310.0907,-26.3672 310.0907,-18 310.0907,-10.2538 266.5509,-8.2222 236.4855,-11.9053\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"229.5437,-12.9012 236.0254,-8.7889 233.0082,-12.4041 236.4728,-11.907 236.4728,-11.907 236.4728,-11.907 233.0082,-12.4041 236.9202,-15.0251 229.5437,-12.9012 229.5437,-12.9012\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"310.0907\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2->3 -->\n",
|
|
"<g id=\"edge18\" class=\"edge\">\n",
|
|
"<title>2->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M193.8959,-19.6225C173.0103,-22.5687 139.6399,-30.839 124.0907,-54 120.3748,-59.535 120.8061,-63.1987 124.0907,-69 125.2003,-70.9598 145.1627,-82.7319 161.7609,-92.289\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"168.141,-95.9498 160.5018,-95.1982 165.1052,-94.2079 162.0695,-92.466 162.0695,-92.466 162.0695,-92.466 165.1052,-94.2079 163.6372,-89.7338 168.141,-95.9498 168.141,-95.9498\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"124.0907\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->2 -->\n",
|
|
"<g id=\"edge19\" class=\"edge\">\n",
|
|
"<title>3->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M189.6226,-87.8116C193.8411,-74.7042 199.7027,-56.4914 204.3811,-41.955\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"206.5703,-35.1527 207.4243,-42.7812 205.498,-38.4844 204.4257,-41.8161 204.4257,-41.8161 204.4257,-41.8161 205.498,-38.4844 201.4272,-40.851 206.5703,-35.1527 206.5703,-35.1527\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"199.0907\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->2 -->\n",
|
|
"<g id=\"edge20\" class=\"edge\">\n",
|
|
"<title>3->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M202.2743,-102.658C221.605,-99.0915 251.2545,-90.2906 265.0907,-69 275.812,-52.5026 254.4287,-37.3892 235.7026,-27.97\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"228.988,-24.7653 236.6622,-24.9376 232.1467,-26.2729 235.3054,-27.7805 235.3054,-27.7805 235.3054,-27.7805 232.1467,-26.2729 233.9486,-30.6233 228.988,-24.7653 228.988,-24.7653\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"267.0907\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b & c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->3 -->\n",
|
|
"<g id=\"edge21\" class=\"edge\">\n",
|
|
"<title>3->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M201.8725,-108.775C211.4057,-109.4165 220.0907,-108.1582 220.0907,-105 220.0907,-102.6807 215.4068,-101.386 209.1428,-101.1159\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"201.8725,-101.225 208.8244,-97.9702 205.3721,-101.1724 208.8717,-101.1199 208.8717,-101.1199 208.8717,-101.1199 205.3721,-101.1724 208.919,-104.2695 201.8725,-101.225 201.8725,-101.225\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"220.0907\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->3 -->\n",
|
|
"<g id=\"edge22\" class=\"edge\">\n",
|
|
"<title>3->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M201.5208,-110.0252C232.2257,-115.0833 286.0907,-113.4082 286.0907,-105 286.0907,-97.2158 239.9246,-95.2025 208.7087,-98.9598\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"201.5208,-99.9748 208.0116,-95.8769 204.9864,-99.4854 208.452,-98.996 208.452,-98.996 208.452,-98.996 204.9864,-99.4854 208.8925,-102.1151 201.5208,-99.9748 201.5208,-99.9748\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"286.0907\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b & !c</text>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
"<IPython.core.display.HTML object>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"def product1(left, right):\n",
|
|
" # A bdd_dict object associates BDD variables (that are \n",
|
|
" # used in BDDs labeleing the edges) to atomic propositions.\n",
|
|
" bdict = left.get_dict()\n",
|
|
" # If the two automata do not have the same BDD dict, then\n",
|
|
" # we cannot easily detect compatible transitions.\n",
|
|
" if right.get_dict() != bdict:\n",
|
|
" raise RuntimeError(\"automata should share their dictionary\")\n",
|
|
" \n",
|
|
" result = spot.make_twa_graph(bdict)\n",
|
|
" # This will be our state dictionary\n",
|
|
" sdict = {}\n",
|
|
" # The list of output states for which we have not yet\n",
|
|
" # computed the successors. Items on this list are triplets\n",
|
|
" # of the form (ls, rs, p) where ls,rs are the state number in\n",
|
|
" # the left and right automata, and p is the state number if\n",
|
|
" # the output automaton.\n",
|
|
" todo = []\n",
|
|
" # Transform a pair of state number (ls, rs) into a state number in\n",
|
|
" # the output automaton, creating a new state if needed. Whenever\n",
|
|
" # a new state is created, we can add it to todo.\n",
|
|
" def dst(ls, rs):\n",
|
|
" pair = (ls, rs)\n",
|
|
" p = sdict.get(pair)\n",
|
|
" if p is None:\n",
|
|
" p = result.new_state()\n",
|
|
" sdict[pair] = p\n",
|
|
" todo.append((ls, rs, p))\n",
|
|
" return p\n",
|
|
" \n",
|
|
" # Setup the initial state. It always exists.\n",
|
|
" result.set_init_state(dst(left.get_init_state_number(), \n",
|
|
" right.get_init_state_number()))\n",
|
|
"\n",
|
|
" # Build all states and edges in the product\n",
|
|
" while todo:\n",
|
|
" lsrc, rsrc, osrc = todo.pop()\n",
|
|
" for lt in left.out(lsrc):\n",
|
|
" for rt in right.out(rsrc):\n",
|
|
" cond = lt.cond & rt.cond\n",
|
|
" if cond != buddy.bddfalse:\n",
|
|
" result.new_edge(osrc, dst(lt.dst, rt.dst), cond)\n",
|
|
" return result\n",
|
|
"\n",
|
|
"p1 = product1(a1, a2)\n",
|
|
"show_prod(a1, a2, p1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Besides the obvious lack of acceptance condition (which defaults to `t`) and acceptance sets, there is a less obvious problem: we never declared the set of atomic propositions used by the result automaton. This as two consequences:\n",
|
|
"- calling `p1.ap()` will return an empty set of atomic propositions"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"(a,)\n",
|
|
"(c, b)\n",
|
|
"()\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"print(a1.ap())\n",
|
|
"print(a2.ap())\n",
|
|
"print(p1.ap())"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"- the `bdd_dict` instance that is shared by the three automata knows that the atomic propositions `a` and `b` are used by automata `a1` and that `b` and `c` are used by `a2`. But it is unaware of `p1`. That means that if we delete automata `a1` and `a2`, then the `bdd_dict` will release the associated BDD variables, and attempting to print automaton `p1` will either crash (because it uses bdd variables that are not associated to any atomic proposition) or display different atomic propositions (in case the BDD variables have been associated to different propositions in the meantime).\n",
|
|
"\n",
|
|
"These two issues are fixed by either calling `p1.register_ap(...)` for each atomic proposition, or in our case `p1.copy_ap_of(...)` to copy the atomic propositions of each input automaton. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Second attempt: a working product\n",
|
|
"\n",
|
|
"This fixes the list of atomtic propositions, as discussed above, and also sets the correct acceptance condition.\n",
|
|
"The `set_acceptance` method takes two arguments: a number of sets, and an acceptance function. In our case, both of these arguments are readily computed from the number of states and acceptance functions of the input automata."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div style='vertical-align:text-top;display:inline-block;'><?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.40.1 (20161225.0304)\n",
|
|
" -->\n",
|
|
"<!-- Pages: 1 -->\n",
|
|
"<svg width=\"78pt\" height=\"205pt\"\n",
|
|
" viewBox=\"0.00 0.00 78.00 205.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 1) rotate(0) translate(4 201)\">\n",
|
|
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-201 74,-201 74,4 -4,4\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"14\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">Inf(</text>\n",
|
|
"<text text-anchor=\"start\" x=\"36\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"52\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)</text>\n",
|
|
"<text text-anchor=\"start\" x=\"12\" y=\"-168.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">[Büchi]</text>\n",
|
|
"<!-- I -->\n",
|
|
"<!-- 0 -->\n",
|
|
"<g id=\"node2\" class=\"node\">\n",
|
|
"<title>0</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"18\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"18\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">0</text>\n",
|
|
"</g>\n",
|
|
"<!-- I->0 -->\n",
|
|
"<g id=\"edge1\" class=\"edge\">\n",
|
|
"<title>I->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M18,-159.8767C18,-156.822 18,-143.0552 18,-130.0759\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"18,-123.0193 21.1501,-130.0192 18,-126.5193 18.0001,-130.0193 18.0001,-130.0193 18.0001,-130.0193 18,-126.5193 14.8501,-130.0193 18,-123.0193 18,-123.0193\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g id=\"edge2\" class=\"edge\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M35.0373,-111.3792C44.8579,-112.6811 54,-110.5547 54,-105 54,-100.834 48.8576,-98.5964 42.1433,-98.2872\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"35.0373,-98.6208 41.8818,-95.1459 38.5335,-98.4566 42.0296,-98.2924 42.0296,-98.2924 42.0296,-98.2924 38.5335,-98.4566 42.1774,-101.439 35.0373,-98.6208 35.0373,-98.6208\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"54\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1 -->\n",
|
|
"<g id=\"node3\" class=\"node\">\n",
|
|
"<title>1</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"18\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"13.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->1 -->\n",
|
|
"<g id=\"edge3\" class=\"edge\">\n",
|
|
"<title>0->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M18,-86.9735C18,-74.2586 18,-57.0603 18,-43.0183\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"18,-36.0034 21.1501,-43.0033 18,-39.5034 18.0001,-43.0034 18.0001,-43.0034 18.0001,-43.0034 18,-39.5034 14.8501,-43.0034 18,-36.0034 18,-36.0034\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"18\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g id=\"edge4\" class=\"edge\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M34.6641,-25.3828C44.625,-27.0234 54,-24.5625 54,-18 54,-13.0781 48.7266,-10.4634 41.8876,-10.1558\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"34.6641,-10.6172 41.449,-7.0273 38.1569,-10.394 41.6498,-10.1709 41.6498,-10.1709 41.6498,-10.1709 38.1569,-10.394 41.8507,-13.3145 34.6641,-10.6172 34.6641,-10.6172\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"58.5\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
|
"<text text-anchor=\"start\" x=\"54\" y=\"-6.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg>\n",
|
|
"</div><div style='vertical-align:text-top;display:inline-block;'><svg height=\"220pt\" viewBox=\"0.00 0.00 208.02 220.00\" width=\"208pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
|
|
"<g class=\"graph\" id=\"graph0\" transform=\"scale(1 1) rotate(0) translate(4 216)\">\n",
|
|
"<polygon fill=\"#ffffff\" points=\"-4,4 -4,-216 204.0193,-216 204.0193,4 -4,4\" stroke=\"transparent\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"53.0096\" y=\"-197.8\">Inf(</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"75.0096\" y=\"-197.8\">❶</text>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"91.0096\" y=\"-197.8\">)&Inf(</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"127.0096\" y=\"-197.8\">❷</text>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"143.0096\" y=\"-197.8\">)</text>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"56.0096\" y=\"-183.8\">[gen. Büchi 2]</text>\n",
|
|
"<!-- I -->\n",
|
|
"<!-- 0 -->\n",
|
|
"<g class=\"node\" id=\"node2\">\n",
|
|
"<title>0</title>\n",
|
|
"<ellipse cx=\"68.0193\" cy=\"-120\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"68.0193\" y=\"-116.3\">0</text>\n",
|
|
"</g>\n",
|
|
"<!-- I->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge1\">\n",
|
|
"<title>I->0</title>\n",
|
|
"<path d=\"M68.0193,-174.8767C68.0193,-171.822 68.0193,-158.0552 68.0193,-145.0759\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"68.0193,-138.0193 71.1694,-145.0192 68.0193,-141.5193 68.0194,-145.0193 68.0194,-145.0193 68.0194,-145.0193 68.0193,-141.5193 64.8694,-145.0193 68.0193,-138.0193 68.0193,-138.0193\" stroke=\"#000000\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge2\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path d=\"M85.801,-123.2357C95.3342,-123.7856 104.0193,-122.707 104.0193,-120 104.0193,-118.012 99.3354,-116.9023 93.0714,-116.6708\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"85.801,-116.7643 92.7599,-113.5244 89.3007,-116.7192 92.8004,-116.6742 92.8004,-116.6742 92.8004,-116.6742 89.3007,-116.7192 92.841,-119.8239 85.801,-116.7643 85.801,-116.7643\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"104.0193\" y=\"-123.8\">!b & c</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"114.5193\" y=\"-108.8\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge3\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path d=\"M85.5885,-124.845C108.7793,-128.5056 141.0193,-126.8906 141.0193,-120 141.0193,-113.7823 114.7687,-111.8601 92.6031,-114.2335\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"85.5885,-115.155 92.1185,-111.12 89.0587,-114.6991 92.5288,-114.2432 92.5288,-114.2432 92.5288,-114.2432 89.0587,-114.6991 92.9392,-117.3663 85.5885,-115.155 85.5885,-115.155\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"152.5193\" y=\"-123.8\">b</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"141.0193\" y=\"-109.8\">❶</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"157.0193\" y=\"-109.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1 -->\n",
|
|
"<g class=\"node\" id=\"node3\">\n",
|
|
"<title>1</title>\n",
|
|
"<ellipse cx=\"68.0193\" cy=\"-18\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"68.0193\" y=\"-14.3\">1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->1 -->\n",
|
|
"<g class=\"edge\" id=\"edge4\">\n",
|
|
"<title>0->1</title>\n",
|
|
"<path d=\"M50.3286,-115.3021C35.307,-110.2732 14.6933,-100.6701 5.0193,-84 -1.6731,-72.4679 -1.6731,-65.5321 5.0193,-54 13.3329,-39.6741 29.7258,-30.5674 43.7056,-25.0978\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"50.3286,-22.6979 44.8205,-28.0443 47.0379,-23.8903 43.7473,-25.0827 43.7473,-25.0827 43.7473,-25.0827 47.0379,-23.8903 42.6741,-22.1211 50.3286,-22.6979 50.3286,-22.6979\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"5.0193\" y=\"-65.3\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge5\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path d=\"M68.0193,-36.0777C68.0193,-52.2729 68.0193,-76.2033 68.0193,-94.3707\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"68.0193,-101.7644 64.8694,-94.7644 68.0193,-98.2644 68.0194,-94.7644 68.0194,-94.7644 68.0194,-94.7644 68.0193,-98.2644 71.1694,-94.7645 68.0193,-101.7644 68.0193,-101.7644\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"68.0193\" y=\"-72.8\">!b & c</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"78.5193\" y=\"-57.8\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge6\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path d=\"M83.5721,-27.9858C91.923,-34.3143 101.423,-43.3143 106.0193,-54 111.2877,-66.2483 111.2877,-71.7517 106.0193,-84 102.4285,-92.3482 95.8446,-99.6675 89.154,-105.4879\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"83.5721,-110.0142 87.0252,-103.1586 86.2906,-107.8098 89.0092,-105.6053 89.0092,-105.6053 89.0092,-105.6053 86.2906,-107.8098 90.9932,-108.052 83.5721,-110.0142 83.5721,-110.0142\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"109.0193\" y=\"-72.8\">b & c</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"110.0193\" y=\"-58.8\">❶</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"126.0193\" y=\"-58.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g class=\"edge\" id=\"edge7\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path d=\"M85.801,-22.4941C95.3342,-23.2578 104.0193,-21.7598 104.0193,-18 104.0193,-15.2389 99.3354,-13.6976 93.0714,-13.3761\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"85.801,-13.5059 92.7436,-10.2313 89.3004,-13.4434 92.7999,-13.3808 92.7999,-13.3808 92.7999,-13.3808 89.3004,-13.4434 92.8562,-16.5303 85.801,-13.5059 85.801,-13.5059\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"104.0193\" y=\"-14.3\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g class=\"edge\" id=\"edge8\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path d=\"M85.0367,-24.4905C109.3677,-29.8803 145.0193,-27.7168 145.0193,-18 145.0193,-9.1942 115.7391,-6.5917 92.1396,-10.1928\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"85.0367,-11.5095 91.3452,-7.1363 88.4781,-10.8715 91.9194,-10.2335 91.9194,-10.2335 91.9194,-10.2335 88.4781,-10.8715 92.4936,-13.3307 85.0367,-11.5095 85.0367,-11.5095\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"145.0193\" y=\"-21.8\">b & !c</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"155.5193\" y=\"-6.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg></div><div style='vertical-align:text-top;display:inline-block;'><?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.40.1 (20161225.0304)\n",
|
|
" -->\n",
|
|
"<!-- Pages: 1 -->\n",
|
|
"<svg width=\"422pt\" height=\"360pt\"\n",
|
|
" viewBox=\"0.00 0.00 422.21 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(.8491 .8491) rotate(0) translate(4 420)\">\n",
|
|
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-420 493.2713,-420 493.2713,4 -4,4\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"171.6357\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">Inf(</text>\n",
|
|
"<text text-anchor=\"start\" x=\"193.6357\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"209.6357\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)&Inf(</text>\n",
|
|
"<text text-anchor=\"start\" x=\"245.6357\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"261.6357\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)&Inf(</text>\n",
|
|
"<text text-anchor=\"start\" x=\"297.6357\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"<text text-anchor=\"start\" x=\"313.6357\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)</text>\n",
|
|
"<text text-anchor=\"start\" x=\"200.6357\" y=\"-387.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">[gen. Büchi 3]</text>\n",
|
|
"<!-- I -->\n",
|
|
"<!-- 0 -->\n",
|
|
"<g id=\"node2\" class=\"node\">\n",
|
|
"<title>0</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"268.2713\" cy=\"-324\" rx=\"18\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"268.2713\" y=\"-320.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">0</text>\n",
|
|
"</g>\n",
|
|
"<!-- I->0 -->\n",
|
|
"<g id=\"edge1\" class=\"edge\">\n",
|
|
"<title>I->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M268.2713,-378.8767C268.2713,-375.822 268.2713,-362.0552 268.2713,-349.0759\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"268.2713,-342.0193 271.4214,-349.0192 268.2714,-345.5193 268.2714,-349.0193 268.2714,-349.0193 268.2714,-349.0193 268.2714,-345.5193 265.1214,-349.0193 268.2713,-342.0193 268.2713,-342.0193\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g id=\"edge2\" class=\"edge\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M286.0531,-327.2357C295.5863,-327.7856 304.2713,-326.707 304.2713,-324 304.2713,-322.012 299.5874,-320.9023 293.3234,-320.6708\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"286.0531,-320.7643 293.0119,-317.5244 289.5528,-320.7192 293.0525,-320.6742 293.0525,-320.6742 293.0525,-320.6742 289.5528,-320.7192 293.093,-323.8239 286.0531,-320.7643 286.0531,-320.7643\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"304.2713\" y=\"-327.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"314.7713\" y=\"-312.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g id=\"edge3\" class=\"edge\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M285.8405,-328.845C309.0313,-332.5056 341.2713,-330.8906 341.2713,-324 341.2713,-317.7823 315.0208,-315.8601 292.8552,-318.2335\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"285.8405,-319.155 292.3706,-315.12 289.3107,-318.6991 292.7809,-318.2432 292.7809,-318.2432 292.7809,-318.2432 289.3107,-318.6991 293.1912,-321.3663 285.8405,-319.155 285.8405,-319.155\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"352.7713\" y=\"-327.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">b</text>\n",
|
|
"<text text-anchor=\"start\" x=\"341.2713\" y=\"-313.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"357.2713\" y=\"-313.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1 -->\n",
|
|
"<g id=\"node3\" class=\"node\">\n",
|
|
"<title>1</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"122.2713\" cy=\"-222\" rx=\"18\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"122.2713\" y=\"-218.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->1 -->\n",
|
|
"<g id=\"edge4\" class=\"edge\">\n",
|
|
"<title>0->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M250.1781,-322.304C214.4948,-318.5455 137.1261,-308.2061 121.2713,-288 112.2585,-276.5136 112.4644,-260.113 114.9454,-246.5347\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"116.5137,-239.3307 118.1025,-246.8406 115.7691,-242.7506 115.0246,-246.1705 115.0246,-246.1705 115.0246,-246.1705 115.7691,-242.7506 111.9467,-245.5004 116.5137,-239.3307 116.5137,-239.3307\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"121.2713\" y=\"-269.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2 -->\n",
|
|
"<g id=\"node4\" class=\"node\">\n",
|
|
"<title>2</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"211.2713\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"211.2713\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">2</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->2 -->\n",
|
|
"<g id=\"edge5\" class=\"edge\">\n",
|
|
"<title>0->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M283.5403,-314.118C303.7096,-300.184 338.7226,-272.7694 356.2713,-240 385.4715,-185.4736 395.6811,-160.0293 374.2713,-102 364.5599,-75.678 356.8097,-69.2678 333.2713,-54 303.2557,-34.5309 262.3706,-25.2859 236.3944,-21.1217\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"229.1624,-20.0321 236.5537,-17.9602 232.6234,-20.5536 236.0843,-21.0751 236.0843,-21.0751 236.0843,-21.0751 232.6234,-20.5536 235.615,-24.1899 229.1624,-20.0321 229.1624,-20.0321\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"385.2713\" y=\"-174.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"408.2713\" y=\"-159.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->2 -->\n",
|
|
"<g id=\"edge6\" class=\"edge\">\n",
|
|
"<title>0->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M285.4546,-318.4125C336.7236,-300.673 483.1316,-241.7022 451.2713,-156 430.4082,-99.8794 414.4471,-85.0779 363.2713,-54 342.0838,-41.1333 273.6436,-28.2847 236.2428,-21.9898\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"229.1997,-20.8202 236.6212,-18.8596 232.6524,-21.3936 236.1051,-21.9671 236.1051,-21.9671 236.1051,-21.9671 232.6524,-21.3936 235.589,-25.0745 229.1997,-20.8202 229.1997,-20.8202\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"455.2713\" y=\"-174.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b</text>\n",
|
|
"<text text-anchor=\"start\" x=\"456.2713\" y=\"-160.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"472.2713\" y=\"-160.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3 -->\n",
|
|
"<g id=\"node5\" class=\"node\">\n",
|
|
"<title>3</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"183.2713\" cy=\"-120\" rx=\"18\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"183.2713\" y=\"-116.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">3</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->3 -->\n",
|
|
"<g id=\"edge7\" class=\"edge\">\n",
|
|
"<title>0->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M274.5883,-307.0263C276.4914,-301.0945 278.3252,-294.3343 279.2713,-288 288.0184,-229.4401 297.4112,-202.9008 261.2713,-156 248.3674,-139.2538 225.8391,-130.0152 208.3009,-125.1045\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"201.1327,-123.2556 208.6976,-121.9538 204.5218,-124.1298 207.9109,-125.004 207.9109,-125.004 207.9109,-125.004 204.5218,-124.1298 207.1241,-128.0542 201.1327,-123.2556 201.1327,-123.2556\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"286.2713\" y=\"-218.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g id=\"edge8\" class=\"edge\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M136.5589,-233.7338C144.4666,-240.4988 154.2814,-249.3548 162.2713,-258 173.6746,-270.3384 172.0295,-277.6596 185.2713,-288 202.7109,-301.6184 226.091,-311.1502 243.5925,-316.9691\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"250.6987,-319.2367 243.0724,-320.1095 247.3643,-318.1726 244.03,-317.1086 244.03,-317.1086 244.03,-317.1086 247.3643,-318.1726 244.9876,-314.1077 250.6987,-319.2367 250.6987,-319.2367\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"185.2713\" y=\"-276.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"195.7713\" y=\"-261.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g id=\"edge9\" class=\"edge\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M140.1154,-224.9991C161.4446,-229.306 197.3726,-238.9209 222.2713,-258 226.5792,-261.301 242.6129,-284.923 254.5459,-302.9735\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"258.4126,-308.844 251.9314,-304.7309 256.4873,-305.9211 254.5621,-302.9982 254.5621,-302.9982 254.5621,-302.9982 256.4873,-305.9211 257.1927,-301.2654 258.4126,-308.844 258.4126,-308.844\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"243.2713\" y=\"-276.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"244.2713\" y=\"-262.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"260.2713\" y=\"-262.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g id=\"edge10\" class=\"edge\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M140.0531,-226.4941C149.5863,-227.2578 158.2713,-225.7598 158.2713,-222 158.2713,-219.2389 153.5874,-217.6976 147.3234,-217.3761\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"140.0531,-217.5059 146.9957,-214.2313 143.5525,-217.4434 147.052,-217.3808 147.052,-217.3808 147.052,-217.3808 143.5525,-217.4434 147.1082,-220.5303 140.0531,-217.5059 140.0531,-217.5059\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"158.2713\" y=\"-218.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g id=\"edge11\" class=\"edge\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M139.2888,-228.4905C163.6198,-233.8803 199.2713,-231.7168 199.2713,-222 199.2713,-213.1942 169.9911,-210.5917 146.3917,-214.1928\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"139.2888,-215.5095 145.5973,-211.1363 142.7301,-214.8715 146.1715,-214.2335 146.1715,-214.2335 146.1715,-214.2335 142.7301,-214.8715 146.7457,-217.3307 139.2888,-215.5095 139.2888,-215.5095\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"199.2713\" y=\"-225.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"209.7713\" y=\"-210.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->2 -->\n",
|
|
"<g id=\"edge12\" class=\"edge\">\n",
|
|
"<title>1->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M105.4792,-215.298C67.0005,-198.8733 -22.1909,-154.1298 5.2713,-102 22.8534,-68.6251 40.9813,-69.7229 75.2713,-54 112.1599,-37.0856 158.4538,-26.9624 186.4052,-21.9401\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"193.4394,-20.7147 187.0839,-25.0194 189.9913,-21.3154 186.5432,-21.9162 186.5432,-21.9162 186.5432,-21.9162 189.9913,-21.3154 186.0026,-18.8129 193.4394,-20.7147 193.4394,-20.7147\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"5.2713\" y=\"-123.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"28.2713\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->2 -->\n",
|
|
"<g id=\"edge13\" class=\"edge\">\n",
|
|
"<title>1->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M114.603,-205.4205C100.3127,-171.7645 74.4887,-95.1434 114.2713,-54 133.4542,-34.161 164.5476,-25.1683 186.3471,-21.1487\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"193.3531,-19.9677 186.9741,-24.2376 189.9018,-20.5496 186.4504,-21.1314 186.4504,-21.1314 186.4504,-21.1314 189.9018,-20.5496 185.9268,-18.0252 193.3531,-19.9677 193.3531,-19.9677\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"95.2713\" y=\"-123.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"108.2713\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"124.2713\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->3 -->\n",
|
|
"<g id=\"edge14\" class=\"edge\">\n",
|
|
"<title>1->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M139.962,-217.3021C154.9836,-212.2732 175.5973,-202.6701 185.2713,-186 192.4565,-173.6187 192.156,-157.6122 189.9632,-144.4633\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"188.5857,-137.4935 193.0332,-143.7499 189.2643,-140.9271 189.943,-144.3607 189.943,-144.3607 189.943,-144.3607 189.2643,-140.9271 186.8527,-144.9714 188.5857,-137.4935 188.5857,-137.4935\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"191.2713\" y=\"-167.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->3 -->\n",
|
|
"<g id=\"edge15\" class=\"edge\">\n",
|
|
"<title>1->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M116.6152,-204.78C113.0751,-190.6905 110.6432,-170.7527 119.2713,-156 119.2907,-155.9669 142.4704,-142.9328 160.9245,-132.5595\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"167.458,-128.8872 162.8993,-135.0631 164.4069,-130.6021 161.3558,-132.3171 161.3558,-132.3171 161.3558,-132.3171 164.4069,-130.6021 159.8124,-129.5712 167.458,-128.8872 167.458,-128.8872\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"119.2713\" y=\"-174.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"142.2713\" y=\"-159.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2->2 -->\n",
|
|
"<g id=\"edge16\" class=\"edge\">\n",
|
|
"<title>2->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M229.0531,-22.4941C238.5863,-23.2578 247.2713,-21.7598 247.2713,-18 247.2713,-15.2389 242.5874,-13.6976 236.3234,-13.3761\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"229.0531,-13.5059 235.9957,-10.2313 232.5525,-13.4434 236.052,-13.3808 236.052,-13.3808 236.052,-13.3808 232.5525,-13.4434 236.1082,-16.5303 229.0531,-13.5059 229.0531,-13.5059\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"247.2713\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"262.2713\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"278.2713\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2->2 -->\n",
|
|
"<g id=\"edge17\" class=\"edge\">\n",
|
|
"<title>2->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M228.2884,-23.9824C257.9713,-30.0039 309.2713,-28.0098 309.2713,-18 309.2713,-8.7331 265.3036,-6.3363 235.2249,-10.8093\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"228.2884,-12.0176 234.644,-7.713 231.7365,-11.4169 235.1846,-10.8163 235.1846,-10.8163 235.1846,-10.8163 231.7365,-11.4169 235.7252,-13.9196 228.2884,-12.0176 228.2884,-12.0176\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"316.2713\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b</text>\n",
|
|
"<text text-anchor=\"start\" x=\"309.2713\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"325.2713\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"341.2713\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2->3 -->\n",
|
|
"<g id=\"edge18\" class=\"edge\">\n",
|
|
"<title>2->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M193.0765,-19.6225C172.1909,-22.5687 138.8205,-30.839 123.2713,-54 115.8395,-65.07 116.702,-72.3973 123.2713,-84 124.3809,-85.9598 144.3433,-97.7319 160.9415,-107.289\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"167.3216,-110.9498 159.6824,-110.1982 164.2858,-109.2079 161.2501,-107.466 161.2501,-107.466 161.2501,-107.466 164.2858,-109.2079 162.8178,-104.7338 167.3216,-110.9498 167.3216,-110.9498\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"123.2713\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"148.2713\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->2 -->\n",
|
|
"<g id=\"edge19\" class=\"edge\">\n",
|
|
"<title>3->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M188.1486,-102.233C192.6855,-85.7055 199.4865,-60.9305 204.5395,-42.523\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"206.45,-35.5634 207.6345,-43.1476 205.5235,-38.9386 204.5969,-42.3137 204.5969,-42.3137 204.5969,-42.3137 205.5235,-38.9386 201.5593,-41.4798 206.45,-35.5634 206.45,-35.5634\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"200.2713\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"215.2713\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"231.2713\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->2 -->\n",
|
|
"<g id=\"edge20\" class=\"edge\">\n",
|
|
"<title>3->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M201.1731,-117.9235C220.9437,-114.5678 251.8795,-105.9295 266.2713,-84 273.587,-72.8528 272.6123,-65.729 266.2713,-54 259.6021,-41.6637 246.6629,-32.8758 235.0097,-27.0721\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"228.3542,-23.9955 236.0299,-24.0735 231.5312,-25.4641 234.7082,-26.9328 234.7082,-26.9328 234.7082,-26.9328 231.5312,-25.4641 233.3864,-29.7921 228.3542,-23.9955 228.3542,-23.9955\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"271.2713\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"276.2713\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"292.2713\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"308.2713\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->3 -->\n",
|
|
"<g id=\"edge21\" class=\"edge\">\n",
|
|
"<title>3->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M201.0531,-124.4941C210.5863,-125.2578 219.2713,-123.7598 219.2713,-120 219.2713,-117.2389 214.5874,-115.6976 208.3234,-115.3761\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"201.0531,-115.5059 207.9957,-112.2313 204.5525,-115.4434 208.052,-115.3808 208.052,-115.3808 208.052,-115.3808 204.5525,-115.4434 208.1082,-118.5303 201.0531,-115.5059 201.0531,-115.5059\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"219.2713\" y=\"-123.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"244.2713\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->3 -->\n",
|
|
"<g id=\"edge22\" class=\"edge\">\n",
|
|
"<title>3->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M200.7014,-125.9824C231.4063,-132.0039 285.2713,-130.0098 285.2713,-120 285.2713,-110.7331 239.1052,-108.3363 207.8893,-112.8093\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"200.7014,-114.0176 207.0823,-109.7507 204.153,-113.4374 207.6046,-112.8571 207.6046,-112.8571 207.6046,-112.8571 204.153,-113.4374 208.1268,-115.9635 200.7014,-114.0176 200.7014,-114.0176\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"285.2713\" y=\"-123.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"300.2713\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"316.2713\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
"<IPython.core.display.HTML object>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"(a, c, b)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"def product2(left, right):\n",
|
|
" bdict = left.get_dict()\n",
|
|
" if right.get_dict() != bdict:\n",
|
|
" raise RuntimeError(\"automata should share their dictionary\")\n",
|
|
" \n",
|
|
" result = spot.make_twa_graph(bdict)\n",
|
|
" # Copy the atomic propositions of the two input automata\n",
|
|
" result.copy_ap_of(left)\n",
|
|
" result.copy_ap_of(right)\n",
|
|
" \n",
|
|
" sdict = {}\n",
|
|
" todo = []\n",
|
|
" def dst(ls, rs):\n",
|
|
" pair = (ls, rs)\n",
|
|
" p = sdict.get(pair)\n",
|
|
" if p is None:\n",
|
|
" p = result.new_state()\n",
|
|
" sdict[pair] = p\n",
|
|
" todo.append((ls, rs, p))\n",
|
|
" return p\n",
|
|
" \n",
|
|
" result.set_init_state(dst(left.get_init_state_number(), \n",
|
|
" right.get_init_state_number()))\n",
|
|
"\n",
|
|
" # The acceptance sets of the right automaton will be shifted by this amount\n",
|
|
" shift = left.num_sets()\n",
|
|
" result.set_acceptance(shift + right.num_sets(),\n",
|
|
" left.get_acceptance() & (right.get_acceptance() << shift))\n",
|
|
" \n",
|
|
" while todo:\n",
|
|
" lsrc, rsrc, osrc = todo.pop()\n",
|
|
" for lt in left.out(lsrc):\n",
|
|
" for rt in right.out(rsrc):\n",
|
|
" cond = lt.cond & rt.cond\n",
|
|
" if cond != buddy.bddfalse:\n",
|
|
" # membership of this transitions to the new acceptance sets\n",
|
|
" acc = lt.acc | (rt.acc << shift)\n",
|
|
" result.new_edge(osrc, dst(lt.dst, rt.dst), cond, acc)\n",
|
|
" return result\n",
|
|
"\n",
|
|
"p2 = product2(a1, a2)\n",
|
|
"show_prod(a1, a2, p2)\n",
|
|
"print(p2.ap())"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Third attempt: a more usable product\n",
|
|
"\n",
|
|
"We could stop with the previous function: the result is a correct product from a theoretical point of view. However our function is still inferior to `spot.product()` in a couple of points:\n",
|
|
"- states are not presented as pairs\n",
|
|
"- the properties of the resulting automaton are not set\n",
|
|
"\n",
|
|
"The former point could be addressed by calling `set_state_names()` and passing an array of strings: if a state number is smaller than the size of that array, then the string at that position will be displayed instead of the state number in the dot output. However we can do even better by using `set_product_states()` and passing an array of pairs of states. Besides the output routines, some algorithms actually retrieve this vector of pair of states to work on the product.\n",
|
|
"\n",
|
|
"Regarding the latter point, consider for instance the deterministic nature of these automata. In Spot an automaton is deterministic if it is both existential (no universal branching) and universal (no non-deterministic branching). In our case we will restrict the algorithm to existantial input (by asserting `is_existential()` on both operands), so we can consider that the `prop_universal()` property is an indication of determinism:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"maybe\n",
|
|
"yes\n",
|
|
"maybe\n",
|
|
"maybe\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"print(a1.prop_universal())\n",
|
|
"print(a2.prop_universal())\n",
|
|
"print(prod.prop_universal())\n",
|
|
"print(p1.prop_universal())"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Because `a1` and `a2` are deterministic, their product is necessarily deterministic. This is a property that the `spot.product()` algorithm will preserve, but that our version does not *yet* preserve. We can fix that by adding\n",
|
|
"\n",
|
|
" if left.prop_universal() and right.prop_universal():\n",
|
|
" result.prop_universal(True)\n",
|
|
" \n",
|
|
"at the end of our function. Note that this is **not** the same as\n",
|
|
"\n",
|
|
" result.prop_universal(left.prop_universal() and right.prop_universal())\n",
|
|
"\n",
|
|
"because the results the `prop_*()` family of functions take and return instances of `spot.trival` values. These `spot.trival`, can, as their name implies, take one amongst three values representing `yes`, `no`, and `maybe`. `yes` and `no` should be used when we actually know that the automaton is deterministic or not (not deterministic meaning that there actually exists some non determinitic state in the automaton), and `maybe` when we do not know. \n",
|
|
"\n",
|
|
"The one-liner above is wrong for two reasons:\n",
|
|
"\n",
|
|
" - if `left` and `right` are non-deterministic, their product could be deterministic, so calling prop_universal(False) would be wrong. \n",
|
|
"\n",
|
|
" - the use of the `and` operator on `trival` is misleading in non-Boolean context. The `&` operator would be the correct operator to use if you want to work in threed-valued logic. Compare: "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
" no & no = no no and no = no \n",
|
|
" no & maybe = no no and maybe = no \n",
|
|
" no & yes = no no and yes = no \n",
|
|
"maybe & no = no maybe and no = maybe\n",
|
|
"maybe & maybe = maybe maybe and maybe = maybe\n",
|
|
"maybe & yes = maybe maybe and yes = maybe\n",
|
|
" yes & no = no yes and no = no \n",
|
|
" yes & maybe = maybe yes and maybe = maybe\n",
|
|
" yes & yes = yes yes and yes = yes \n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"yes = spot.trival(True)\n",
|
|
"no = spot.trival(False)\n",
|
|
"maybe = spot.trival_maybe()\n",
|
|
"for u in (no, maybe, yes):\n",
|
|
" for v in (no, maybe, yes):\n",
|
|
" print(\"{u!s:>5} & {v!s:<5} = {r1!s:<5} {u!s:>5} and {v!s:<5} = {r2!s:<5}\"\n",
|
|
" .format(u=u, v=v, r1=(u&v), r2=(u and v)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"The reason `maybe and no` is equal to `maybe` is that Python evaluate it like `no if maybe else maybe`, but when a trival is evaluated in a Boolean context (as in `if maybe`) the result is True only if the trival is equal to yes.\n",
|
|
"\n",
|
|
"So our\n",
|
|
"\n",
|
|
" if left.prop_universal() and right.prop_universal():\n",
|
|
" result.prop_universal(True)\n",
|
|
"\n",
|
|
"is OK because the `if` body will only be entered of both input automata are known to be deterministic."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"However the question is in fact more general than just determinism: the product of two weak automata is weak, the product of two stutter-invariant automata is stutter-invariant, etc. So when writing an algorithm one should consider which of the [property bits](https://spot.lrde.epita.fr/hoa.html#property-bits) are naturally preserved by the algorithm, and set the relevant bits: this can save time later if the resulting automaton is used as input for another algorithm."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div style='vertical-align:text-top;display:inline-block;'><?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.40.1 (20161225.0304)\n",
|
|
" -->\n",
|
|
"<!-- Pages: 1 -->\n",
|
|
"<svg width=\"78pt\" height=\"205pt\"\n",
|
|
" viewBox=\"0.00 0.00 78.00 205.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 1) rotate(0) translate(4 201)\">\n",
|
|
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-201 74,-201 74,4 -4,4\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"14\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">Inf(</text>\n",
|
|
"<text text-anchor=\"start\" x=\"36\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"52\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)</text>\n",
|
|
"<text text-anchor=\"start\" x=\"12\" y=\"-168.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">[Büchi]</text>\n",
|
|
"<!-- I -->\n",
|
|
"<!-- 0 -->\n",
|
|
"<g id=\"node2\" class=\"node\">\n",
|
|
"<title>0</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"18\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"middle\" x=\"18\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">0</text>\n",
|
|
"</g>\n",
|
|
"<!-- I->0 -->\n",
|
|
"<g id=\"edge1\" class=\"edge\">\n",
|
|
"<title>I->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M18,-159.8767C18,-156.822 18,-143.0552 18,-130.0759\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"18,-123.0193 21.1501,-130.0192 18,-126.5193 18.0001,-130.0193 18.0001,-130.0193 18.0001,-130.0193 18,-126.5193 14.8501,-130.0193 18,-123.0193 18,-123.0193\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g id=\"edge2\" class=\"edge\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M35.0373,-111.3792C44.8579,-112.6811 54,-110.5547 54,-105 54,-100.834 48.8576,-98.5964 42.1433,-98.2872\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"35.0373,-98.6208 41.8818,-95.1459 38.5335,-98.4566 42.0296,-98.2924 42.0296,-98.2924 42.0296,-98.2924 38.5335,-98.4566 42.1774,-101.439 35.0373,-98.6208 35.0373,-98.6208\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"54\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1 -->\n",
|
|
"<g id=\"node3\" class=\"node\">\n",
|
|
"<title>1</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"18\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"13.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->1 -->\n",
|
|
"<g id=\"edge3\" class=\"edge\">\n",
|
|
"<title>0->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M18,-86.9735C18,-74.2586 18,-57.0603 18,-43.0183\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"18,-36.0034 21.1501,-43.0033 18,-39.5034 18.0001,-43.0034 18.0001,-43.0034 18.0001,-43.0034 18,-39.5034 14.8501,-43.0034 18,-36.0034 18,-36.0034\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"18\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g id=\"edge4\" class=\"edge\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M34.6641,-25.3828C44.625,-27.0234 54,-24.5625 54,-18 54,-13.0781 48.7266,-10.4634 41.8876,-10.1558\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"34.6641,-10.6172 41.449,-7.0273 38.1569,-10.394 41.6498,-10.1709 41.6498,-10.1709 41.6498,-10.1709 38.1569,-10.394 41.8507,-13.3145 34.6641,-10.6172 34.6641,-10.6172\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"58.5\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
|
"<text text-anchor=\"start\" x=\"54\" y=\"-6.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg>\n",
|
|
"</div><div style='vertical-align:text-top;display:inline-block;'><svg height=\"220pt\" viewBox=\"0.00 0.00 208.02 220.00\" width=\"208pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
|
|
"<g class=\"graph\" id=\"graph0\" transform=\"scale(1 1) rotate(0) translate(4 216)\">\n",
|
|
"<polygon fill=\"#ffffff\" points=\"-4,4 -4,-216 204.0193,-216 204.0193,4 -4,4\" stroke=\"transparent\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"53.0096\" y=\"-197.8\">Inf(</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"75.0096\" y=\"-197.8\">❶</text>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"91.0096\" y=\"-197.8\">)&Inf(</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"127.0096\" y=\"-197.8\">❷</text>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"143.0096\" y=\"-197.8\">)</text>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"56.0096\" y=\"-183.8\">[gen. Büchi 2]</text>\n",
|
|
"<!-- I -->\n",
|
|
"<!-- 0 -->\n",
|
|
"<g class=\"node\" id=\"node2\">\n",
|
|
"<title>0</title>\n",
|
|
"<ellipse cx=\"68.0193\" cy=\"-120\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"68.0193\" y=\"-116.3\">0</text>\n",
|
|
"</g>\n",
|
|
"<!-- I->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge1\">\n",
|
|
"<title>I->0</title>\n",
|
|
"<path d=\"M68.0193,-174.8767C68.0193,-171.822 68.0193,-158.0552 68.0193,-145.0759\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"68.0193,-138.0193 71.1694,-145.0192 68.0193,-141.5193 68.0194,-145.0193 68.0194,-145.0193 68.0194,-145.0193 68.0193,-141.5193 64.8694,-145.0193 68.0193,-138.0193 68.0193,-138.0193\" stroke=\"#000000\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge2\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path d=\"M85.801,-123.2357C95.3342,-123.7856 104.0193,-122.707 104.0193,-120 104.0193,-118.012 99.3354,-116.9023 93.0714,-116.6708\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"85.801,-116.7643 92.7599,-113.5244 89.3007,-116.7192 92.8004,-116.6742 92.8004,-116.6742 92.8004,-116.6742 89.3007,-116.7192 92.841,-119.8239 85.801,-116.7643 85.801,-116.7643\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"104.0193\" y=\"-123.8\">!b & c</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"114.5193\" y=\"-108.8\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge3\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path d=\"M85.5885,-124.845C108.7793,-128.5056 141.0193,-126.8906 141.0193,-120 141.0193,-113.7823 114.7687,-111.8601 92.6031,-114.2335\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"85.5885,-115.155 92.1185,-111.12 89.0587,-114.6991 92.5288,-114.2432 92.5288,-114.2432 92.5288,-114.2432 89.0587,-114.6991 92.9392,-117.3663 85.5885,-115.155 85.5885,-115.155\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"152.5193\" y=\"-123.8\">b</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"141.0193\" y=\"-109.8\">❶</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"157.0193\" y=\"-109.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1 -->\n",
|
|
"<g class=\"node\" id=\"node3\">\n",
|
|
"<title>1</title>\n",
|
|
"<ellipse cx=\"68.0193\" cy=\"-18\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"68.0193\" y=\"-14.3\">1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->1 -->\n",
|
|
"<g class=\"edge\" id=\"edge4\">\n",
|
|
"<title>0->1</title>\n",
|
|
"<path d=\"M50.3286,-115.3021C35.307,-110.2732 14.6933,-100.6701 5.0193,-84 -1.6731,-72.4679 -1.6731,-65.5321 5.0193,-54 13.3329,-39.6741 29.7258,-30.5674 43.7056,-25.0978\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"50.3286,-22.6979 44.8205,-28.0443 47.0379,-23.8903 43.7473,-25.0827 43.7473,-25.0827 43.7473,-25.0827 47.0379,-23.8903 42.6741,-22.1211 50.3286,-22.6979 50.3286,-22.6979\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"5.0193\" y=\"-65.3\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge5\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path d=\"M68.0193,-36.0777C68.0193,-52.2729 68.0193,-76.2033 68.0193,-94.3707\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"68.0193,-101.7644 64.8694,-94.7644 68.0193,-98.2644 68.0194,-94.7644 68.0194,-94.7644 68.0194,-94.7644 68.0193,-98.2644 71.1694,-94.7645 68.0193,-101.7644 68.0193,-101.7644\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"68.0193\" y=\"-72.8\">!b & c</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"78.5193\" y=\"-57.8\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge6\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path d=\"M83.5721,-27.9858C91.923,-34.3143 101.423,-43.3143 106.0193,-54 111.2877,-66.2483 111.2877,-71.7517 106.0193,-84 102.4285,-92.3482 95.8446,-99.6675 89.154,-105.4879\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"83.5721,-110.0142 87.0252,-103.1586 86.2906,-107.8098 89.0092,-105.6053 89.0092,-105.6053 89.0092,-105.6053 86.2906,-107.8098 90.9932,-108.052 83.5721,-110.0142 83.5721,-110.0142\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"109.0193\" y=\"-72.8\">b & c</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"110.0193\" y=\"-58.8\">❶</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"126.0193\" y=\"-58.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g class=\"edge\" id=\"edge7\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path d=\"M85.801,-22.4941C95.3342,-23.2578 104.0193,-21.7598 104.0193,-18 104.0193,-15.2389 99.3354,-13.6976 93.0714,-13.3761\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"85.801,-13.5059 92.7436,-10.2313 89.3004,-13.4434 92.7999,-13.3808 92.7999,-13.3808 92.7999,-13.3808 89.3004,-13.4434 92.8562,-16.5303 85.801,-13.5059 85.801,-13.5059\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"104.0193\" y=\"-14.3\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g class=\"edge\" id=\"edge8\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path d=\"M85.0367,-24.4905C109.3677,-29.8803 145.0193,-27.7168 145.0193,-18 145.0193,-9.1942 115.7391,-6.5917 92.1396,-10.1928\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"85.0367,-11.5095 91.3452,-7.1363 88.4781,-10.8715 91.9194,-10.2335 91.9194,-10.2335 91.9194,-10.2335 88.4781,-10.8715 92.4936,-13.3307 85.0367,-11.5095 85.0367,-11.5095\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"145.0193\" y=\"-21.8\">b & !c</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"155.5193\" y=\"-6.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg></div><div style='vertical-align:text-top;display:inline-block;'><?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.40.1 (20161225.0304)\n",
|
|
" -->\n",
|
|
"<!-- Pages: 1 -->\n",
|
|
"<svg width=\"437pt\" height=\"360pt\"\n",
|
|
" viewBox=\"0.00 0.00 436.74 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(.8491 .8491) rotate(0) translate(4 420)\">\n",
|
|
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-420 510.3834,-420 510.3834,4 -4,4\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"180.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">Inf(</text>\n",
|
|
"<text text-anchor=\"start\" x=\"202.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"218.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)&Inf(</text>\n",
|
|
"<text text-anchor=\"start\" x=\"254.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"270.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)&Inf(</text>\n",
|
|
"<text text-anchor=\"start\" x=\"306.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"<text text-anchor=\"start\" x=\"322.1917\" y=\"-401.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)</text>\n",
|
|
"<text text-anchor=\"start\" x=\"209.1917\" y=\"-387.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">[gen. Büchi 3]</text>\n",
|
|
"<!-- I -->\n",
|
|
"<!-- 0 -->\n",
|
|
"<g id=\"node2\" class=\"node\">\n",
|
|
"<title>0</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"274.3834\" cy=\"-324\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"264.3834\" y=\"-320.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">0,0</text>\n",
|
|
"</g>\n",
|
|
"<!-- I->0 -->\n",
|
|
"<g id=\"edge1\" class=\"edge\">\n",
|
|
"<title>I->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M274.3834,-378.8767C274.3834,-375.822 274.3834,-362.0552 274.3834,-349.0759\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"274.3834,-342.0193 277.5335,-349.0192 274.3835,-345.5193 274.3835,-349.0193 274.3835,-349.0193 274.3835,-349.0193 274.3835,-345.5193 271.2335,-349.0193 274.3834,-342.0193 274.3834,-342.0193\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g id=\"edge2\" class=\"edge\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M301.1783,-327.3676C311.1638,-327.478 319.3834,-326.3555 319.3834,-324 319.3834,-322.2334 314.7599,-321.1603 308.2355,-320.7808\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"301.1783,-320.6324 308.243,-317.6303 304.6775,-320.706 308.1768,-320.7796 308.1768,-320.7796 308.1768,-320.7796 304.6775,-320.706 308.1105,-323.9289 301.1783,-320.6324 301.1783,-320.6324\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"319.3834\" y=\"-327.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"329.8834\" y=\"-312.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g id=\"edge3\" class=\"edge\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M300.1818,-329.5486C325.5521,-332.248 356.3834,-330.3984 356.3834,-324 356.3834,-318.2014 331.062,-316.1388 307.4313,-317.8121\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"300.1818,-318.4514 306.878,-314.6986 303.6682,-318.1439 307.1547,-317.8364 307.1547,-317.8364 307.1547,-317.8364 303.6682,-318.1439 307.4314,-320.9742 300.1818,-318.4514 300.1818,-318.4514\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"367.8834\" y=\"-327.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">b</text>\n",
|
|
"<text text-anchor=\"start\" x=\"356.3834\" y=\"-313.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"372.3834\" y=\"-313.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1 -->\n",
|
|
"<g id=\"node3\" class=\"node\">\n",
|
|
"<title>1</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"122.3834\" cy=\"-222\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"112.3834\" y=\"-218.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">0,1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->1 -->\n",
|
|
"<g id=\"edge4\" class=\"edge\">\n",
|
|
"<title>0->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M247.6703,-321.2683C209.362,-316.7539 141.7338,-306.3598 126.3834,-288 117.1265,-276.9283 115.9969,-260.8138 117.2445,-247.2797\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"118.1458,-240.0746 120.4025,-247.4114 117.7113,-243.5475 117.2769,-247.0205 117.2769,-247.0205 117.2769,-247.0205 117.7113,-243.5475 114.1512,-246.6295 118.1458,-240.0746 118.1458,-240.0746\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"126.3834\" y=\"-269.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2 -->\n",
|
|
"<g id=\"node4\" class=\"node\">\n",
|
|
"<title>2</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"211.3834\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"201.3834\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1,0</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->2 -->\n",
|
|
"<g id=\"edge5\" class=\"edge\">\n",
|
|
"<title>0->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M293.0541,-310.632C312.7641,-295.5852 343.4155,-269.3727 361.3834,-240 394.1866,-186.3758 418.6507,-159.1107 392.3834,-102 366.81,-46.3976 290.3344,-27.5337 245.3905,-21.1817\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"238.1918,-20.233 245.5434,-18.0247 241.6618,-20.6904 245.1318,-21.1477 245.1318,-21.1477 245.1318,-21.1477 241.6618,-20.6904 244.7202,-24.2707 238.1918,-20.233 238.1918,-20.233\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"402.3834\" y=\"-174.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"425.3834\" y=\"-159.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->2 -->\n",
|
|
"<g id=\"edge6\" class=\"edge\">\n",
|
|
"<title>0->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M299.1526,-316.5334C358.3452,-297.1836 500.7616,-240.9279 468.3834,-156 446.7415,-99.233 429.8641,-84.6047 377.3834,-54 355.2288,-41.0803 286.5471,-29.0979 244.7908,-22.7433\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"237.8284,-21.6979 245.2186,-19.6223 241.2896,-22.2176 244.7508,-22.7374 244.7508,-22.7374 244.7508,-22.7374 241.2896,-22.2176 244.283,-25.8525 237.8284,-21.6979 237.8284,-21.6979\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"472.3834\" y=\"-174.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b</text>\n",
|
|
"<text text-anchor=\"start\" x=\"473.3834\" y=\"-160.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"489.3834\" y=\"-160.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3 -->\n",
|
|
"<g id=\"node5\" class=\"node\">\n",
|
|
"<title>3</title>\n",
|
|
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"192.3834\" cy=\"-120\" rx=\"27\" ry=\"18\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"182.3834\" y=\"-116.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1,1</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->3 -->\n",
|
|
"<g id=\"edge7\" class=\"edge\">\n",
|
|
"<title>0->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M280.933,-306.2959C282.7518,-300.5434 284.4759,-294.0757 285.3834,-288 294.1593,-229.2474 300.5748,-203.1071 264.3834,-156 254.5055,-143.1427 238.7934,-134.5453 224.5639,-128.9874\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"217.7296,-126.4977 225.385,-125.9341 221.0182,-127.6958 224.3068,-128.8938 224.3068,-128.8938 224.3068,-128.8938 221.0182,-127.6958 223.2286,-131.8535 217.7296,-126.4977 217.7296,-126.4977\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"291.3834\" y=\"-218.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g id=\"edge8\" class=\"edge\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M141.1159,-235.4971C149.5127,-241.914 159.3185,-249.935 167.3834,-258 179.4573,-270.0738 177.8178,-277.6304 191.3834,-288 206.6698,-299.6848 226.3318,-308.4301 242.6815,-314.3735\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"249.4633,-316.7495 241.8155,-317.4077 246.1602,-315.5922 242.857,-314.4349 242.857,-314.4349 242.857,-314.4349 246.1602,-315.5922 243.8986,-311.4621 249.4633,-316.7495 249.4633,-316.7495\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"191.3834\" y=\"-276.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"201.8834\" y=\"-261.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g id=\"edge9\" class=\"edge\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M148.9617,-226.2063C171.8304,-230.8831 204.7725,-240.2456 228.3834,-258 232.5591,-261.1399 247.5676,-283.1556 259.3195,-300.9097\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"263.4758,-307.215 256.9932,-303.1041 261.5495,-304.2927 259.6232,-301.3704 259.6232,-301.3704 259.6232,-301.3704 261.5495,-304.2927 262.2533,-299.6368 263.4758,-307.215 263.4758,-307.215\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"249.3834\" y=\"-276.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"250.3834\" y=\"-262.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"266.3834\" y=\"-262.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g id=\"edge10\" class=\"edge\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M148.73,-226.6692C158.9166,-226.8767 167.3834,-225.3203 167.3834,-222 167.3834,-219.5098 162.6209,-218.0117 155.9421,-217.5059\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"148.73,-217.3308 155.8045,-214.3517 152.229,-217.4158 155.728,-217.5008 155.728,-217.5008 155.728,-217.5008 152.229,-217.4158 155.6515,-220.6499 148.73,-217.3308 148.73,-217.3308\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"167.3834\" y=\"-218.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g id=\"edge11\" class=\"edge\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M147.251,-229.4501C174.0704,-233.5654 208.3834,-231.082 208.3834,-222 208.3834,-213.6985 179.7145,-210.9102 154.3048,-213.6351\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"147.251,-214.5499 153.7877,-210.5257 150.7219,-214.0997 154.1928,-213.6496 154.1928,-213.6496 154.1928,-213.6496 150.7219,-214.0997 154.598,-216.7734 147.251,-214.5499 147.251,-214.5499\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"208.3834\" y=\"-225.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"218.8834\" y=\"-210.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->2 -->\n",
|
|
"<g id=\"edge12\" class=\"edge\">\n",
|
|
"<title>1->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M99.22,-212.5175C58.1768,-194.2134 -20.6549,-151.4268 5.3834,-102 22.9655,-68.6251 41.0935,-69.7229 75.3834,-54 108.7449,-38.7029 149.7991,-28.9604 178.0208,-23.5221\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"184.9068,-22.2315 178.6069,-26.6172 181.4667,-22.8763 178.0266,-23.5211 178.0266,-23.5211 178.0266,-23.5211 181.4667,-22.8763 177.4463,-20.425 184.9068,-22.2315 184.9068,-22.2315\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"5.3834\" y=\"-123.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"28.3834\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->2 -->\n",
|
|
"<g id=\"edge13\" class=\"edge\">\n",
|
|
"<title>1->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M114.385,-204.6403C100.0334,-170.5938 74.9053,-94.8285 114.3834,-54 131.0257,-36.7885 156.6324,-27.7406 177.3578,-23.0212\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"184.4624,-21.5261 178.2611,-26.0502 181.0374,-22.2469 177.6124,-22.9677 177.6124,-22.9677 177.6124,-22.9677 181.0374,-22.2469 176.9637,-19.8852 184.4624,-21.5261 184.4624,-21.5261\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"95.3834\" y=\"-123.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"108.3834\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"124.3834\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->3 -->\n",
|
|
"<g id=\"edge14\" class=\"edge\">\n",
|
|
"<title>1->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M146.9525,-214.2558C160.5684,-208.6398 176.496,-199.6049 185.3834,-186 193.1995,-174.0351 195.0851,-158.1714 194.9519,-144.9955\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"194.6952,-137.9939 198.0997,-144.8737 194.8235,-141.4915 194.9518,-144.9892 194.9518,-144.9892 194.9518,-144.9892 194.8235,-141.4915 191.8039,-145.1047 194.6952,-137.9939 194.6952,-137.9939\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"194.3834\" y=\"-167.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->3 -->\n",
|
|
"<g id=\"edge15\" class=\"edge\">\n",
|
|
"<title>1->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M116.4458,-204.3686C112.8224,-190.2225 110.4191,-170.4159 119.3834,-156 121.992,-151.8051 143.5296,-141.4526 162.5399,-132.9206\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"169.3895,-129.8743 164.2736,-135.5971 166.1915,-131.2966 162.9935,-132.7188 162.9935,-132.7188 162.9935,-132.7188 166.1915,-131.2966 161.7135,-129.8406 169.3895,-129.8743 169.3895,-129.8743\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"119.3834\" y=\"-174.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"142.3834\" y=\"-159.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2->2 -->\n",
|
|
"<g id=\"edge16\" class=\"edge\">\n",
|
|
"<title>2->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M237.73,-22.6692C247.9166,-22.8767 256.3834,-21.3203 256.3834,-18 256.3834,-15.5098 251.6209,-14.0117 244.9421,-13.5059\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"237.73,-13.3308 244.8045,-10.3517 241.229,-13.4158 244.728,-13.5008 244.728,-13.5008 244.728,-13.5008 241.229,-13.4158 244.6515,-16.6499 237.73,-13.3308 237.73,-13.3308\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"256.3834\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"271.3834\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"287.3834\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2->2 -->\n",
|
|
"<g id=\"edge17\" class=\"edge\">\n",
|
|
"<title>2->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M236.4465,-24.9574C269.5032,-29.743 318.3834,-27.4238 318.3834,-18 318.3834,-9.2388 276.1353,-6.6183 243.6316,-10.1385\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"236.4465,-11.0426 242.9984,-7.0432 239.9191,-10.6056 243.3917,-10.1686 243.3917,-10.1686 243.3917,-10.1686 239.9191,-10.6056 243.785,-13.2939 236.4465,-11.0426 236.4465,-11.0426\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"325.3834\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b</text>\n",
|
|
"<text text-anchor=\"start\" x=\"318.3834\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"334.3834\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"350.3834\" y=\"-7.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2->3 -->\n",
|
|
"<g id=\"edge18\" class=\"edge\">\n",
|
|
"<title>2->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M184.4642,-21.0648C163.9168,-24.9743 136.9085,-33.854 123.3834,-54 115.9516,-65.07 116.4717,-72.598 123.3834,-84 125.8007,-87.9876 145.6752,-98.1429 163.4765,-106.6546\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"169.9049,-109.7016 162.2303,-109.5498 166.7422,-108.2025 163.5795,-106.7033 163.5795,-106.7033 163.5795,-106.7033 166.7422,-108.2025 164.9287,-103.8569 169.9049,-109.7016 169.9049,-109.7016\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"123.3834\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"148.3834\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->2 -->\n",
|
|
"<g id=\"edge19\" class=\"edge\">\n",
|
|
"<title>3->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M195.7803,-101.7644C198.8334,-85.3742 203.3449,-61.1544 206.7325,-42.9685\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"208.016,-36.0777 209.8308,-43.5362 207.3751,-39.5185 206.7341,-42.9593 206.7341,-42.9593 206.7341,-42.9593 207.3751,-39.5185 203.6373,-42.3824 208.016,-36.0777 208.016,-36.0777\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"203.3834\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"218.3834\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"234.3834\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->2 -->\n",
|
|
"<g id=\"edge20\" class=\"edge\">\n",
|
|
"<title>3->2</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M218.6531,-115.26C236.303,-110.5624 258.2917,-101.4298 269.3834,-84 276.5418,-72.7512 275.8651,-65.6518 269.3834,-54 263.3719,-43.1933 252.6252,-35.2153 242.0022,-29.5555\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"235.4472,-26.3264 243.1187,-26.594 238.5869,-27.8731 241.7266,-29.4198 241.7266,-29.4198 241.7266,-29.4198 238.5869,-27.8731 240.3346,-32.2455 235.4472,-26.3264 235.4472,-26.3264\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"274.3834\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b & c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"279.3834\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"295.3834\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
|
"<text text-anchor=\"start\" x=\"311.3834\" y=\"-58.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->3 -->\n",
|
|
"<g id=\"edge21\" class=\"edge\">\n",
|
|
"<title>3->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M218.73,-124.6692C228.9166,-124.8767 237.3834,-123.3203 237.3834,-120 237.3834,-117.5098 232.6209,-116.0117 225.9421,-115.5059\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"218.73,-115.3308 225.8045,-112.3517 222.229,-115.4158 225.728,-115.5008 225.728,-115.5008 225.728,-115.5008 222.229,-115.4158 225.6515,-118.6499 218.73,-115.3308 218.73,-115.3308\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"237.3834\" y=\"-123.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & !b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"262.3834\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->3 -->\n",
|
|
"<g id=\"edge22\" class=\"edge\">\n",
|
|
"<title>3->3</title>\n",
|
|
"<path fill=\"none\" stroke=\"#000000\" d=\"M217.5241,-126.8825C251.6983,-131.7668 303.3834,-129.4727 303.3834,-120 303.3834,-111.1564 258.3348,-108.5695 224.5437,-112.2394\"/>\n",
|
|
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"217.5241,-113.1175 224.079,-109.1229 220.9971,-112.683 224.47,-112.2486 224.47,-112.2486 224.47,-112.2486 220.9971,-112.683 224.861,-115.3742 217.5241,-113.1175 217.5241,-113.1175\"/>\n",
|
|
"<text text-anchor=\"start\" x=\"303.3834\" y=\"-123.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a & b & !c</text>\n",
|
|
"<text text-anchor=\"start\" x=\"318.3834\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
|
"<text text-anchor=\"start\" x=\"334.3834\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
"<IPython.core.display.HTML object>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"maybe\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"def product3(left, right):\n",
|
|
" # the twa_graph.is_existential() method returns a Boolean, not a spot.trival\n",
|
|
" if not (left.is_existential() and right.is_existential()):\n",
|
|
" raise RuntimeError(\"alternating automata are not supported\")\n",
|
|
" bdict = left.get_dict()\n",
|
|
" if right.get_dict() != bdict:\n",
|
|
" raise RuntimeError(\"automata should share their dictionary\")\n",
|
|
" \n",
|
|
" result = spot.make_twa_graph(bdict)\n",
|
|
" result.copy_ap_of(left)\n",
|
|
" result.copy_ap_of(right)\n",
|
|
" \n",
|
|
" pairs = [] # our array of state pairs\n",
|
|
" sdict = {}\n",
|
|
" todo = []\n",
|
|
" def dst(ls, rs):\n",
|
|
" pair = (ls, rs)\n",
|
|
" p = sdict.get(pair)\n",
|
|
" if p is None:\n",
|
|
" p = result.new_state()\n",
|
|
" sdict[pair] = p\n",
|
|
" todo.append((ls, rs, p))\n",
|
|
" pairs.append((ls, rs)) # name each state\n",
|
|
" return p\n",
|
|
" \n",
|
|
" result.set_init_state(dst(left.get_init_state_number(), \n",
|
|
" right.get_init_state_number()))\n",
|
|
"\n",
|
|
" shift = left.num_sets()\n",
|
|
" result.set_acceptance(shift + right.num_sets(),\n",
|
|
" left.get_acceptance() & (right.get_acceptance() << shift))\n",
|
|
" \n",
|
|
" while todo:\n",
|
|
" lsrc, rsrc, osrc = todo.pop()\n",
|
|
" for lt in left.out(lsrc):\n",
|
|
" for rt in right.out(rsrc):\n",
|
|
" cond = lt.cond & rt.cond\n",
|
|
" if cond != buddy.bddfalse:\n",
|
|
" acc = lt.acc | (rt.acc << shift)\n",
|
|
" result.new_edge(osrc, dst(lt.dst, rt.dst), cond, acc)\n",
|
|
"\n",
|
|
" # Remember the origin of our states\n",
|
|
" result.set_product_states(pairs)\n",
|
|
" \n",
|
|
" # Loop over all the properties we want to preserve if they hold in both automata\n",
|
|
" for p in ('prop_universal', 'prop_complete', 'prop_weak', 'prop_inherently_weak', \n",
|
|
" 'prop_terminal', 'prop_stutter_invariant', 'prop_state_acc'):\n",
|
|
" if getattr(left, p)() and getattr(right, p)():\n",
|
|
" getattr(result, p)(True)\n",
|
|
" return result\n",
|
|
"\n",
|
|
"p3 = product3(a1, a2)\n",
|
|
"show_prod(a1, a2, p3)\n",
|
|
"print(p3.prop_universal())"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"For development, it is useful to know that we can force the automaton printer to show the real state numbers (not the pairs) by passing option `1`, and that we can retrieve the associated pairs ourselves. Note that the pairs also appear as tooltips when we mouse over the states."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/svg+xml": [
|
|
"<svg height=\"360pt\" viewBox=\"0.00 0.00 429.14 360.00\" width=\"429pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
|
|
"<g class=\"graph\" id=\"graph0\" transform=\"scale(.7947 .7947) rotate(0) translate(4 449)\">\n",
|
|
"<polygon fill=\"#ffffff\" points=\"-4,4 -4,-449 536,-449 536,4 -4,4\" stroke=\"transparent\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"193\" y=\"-430.8\">Inf(</text>\n",
|
|
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"215\" y=\"-430.8\">⓿</text>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"231\" y=\"-430.8\">)&Inf(</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"267\" y=\"-430.8\">❶</text>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"283\" y=\"-430.8\">)&Inf(</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"319\" y=\"-430.8\">❷</text>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"335\" y=\"-430.8\">)</text>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"222\" y=\"-416.8\">[gen. Büchi 3]</text>\n",
|
|
"<!-- I -->\n",
|
|
"<!-- 0 -->\n",
|
|
"<g class=\"node\" id=\"node2\">\n",
|
|
"<title>0</title>\n",
|
|
"<g id=\"a_node2\"><a xlink:title=\"0,0\">\n",
|
|
"<ellipse cx=\"56\" cy=\"-209\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"56\" y=\"-205.3\">0</text>\n",
|
|
"</a>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"<!-- I->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge1\">\n",
|
|
"<title>I->0</title>\n",
|
|
"<path d=\"M1.1233,-209C4.178,-209 17.9448,-209 30.9241,-209\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"37.9807,-209 30.9808,-212.1501 34.4807,-209 30.9807,-209.0001 30.9807,-209.0001 30.9807,-209.0001 34.4807,-209 30.9807,-205.8501 37.9807,-209 37.9807,-209\" stroke=\"#000000\"/>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge2\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path d=\"M52.7643,-226.7817C52.2144,-236.3149 53.293,-245 56,-245 57.988,-245 59.0977,-240.3161 59.3292,-234.0521\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"59.2357,-226.7817 62.4756,-233.7406 59.2808,-230.2814 59.3258,-233.7812 59.3258,-233.7812 59.3258,-233.7812 59.2808,-230.2814 56.1761,-233.8217 59.2357,-226.7817 59.2357,-226.7817\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"37.5\" y=\"-263.8\">!b & c</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"48\" y=\"-248.8\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge3\">\n",
|
|
"<title>0->0</title>\n",
|
|
"<path d=\"M50.9906,-226.5771C47.5451,-247.718 49.2148,-275 56,-275 62.043,-275 64.0285,-253.3596 61.9564,-233.6907\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"61.0094,-226.5771 65.0556,-233.1002 61.4713,-230.0465 61.9332,-233.5159 61.9332,-233.5159 61.9332,-233.5159 61.4713,-230.0465 58.8107,-233.9316 61.0094,-226.5771 61.0094,-226.5771\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"51.5\" y=\"-292.8\">b</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"40\" y=\"-278.8\">❶</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"56\" y=\"-278.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1 -->\n",
|
|
"<g class=\"node\" id=\"node3\">\n",
|
|
"<title>1</title>\n",
|
|
"<g id=\"a_node3\"><a xlink:title=\"0,1\">\n",
|
|
"<ellipse cx=\"184\" cy=\"-161\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"184\" y=\"-157.3\">1</text>\n",
|
|
"</a>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"<!-- 0->1 -->\n",
|
|
"<g class=\"edge\" id=\"edge4\">\n",
|
|
"<title>0->1</title>\n",
|
|
"<path d=\"M73.2661,-214.4385C89.3839,-218.536 113.7705,-222.1826 133,-214 148.2089,-207.5283 161.0761,-194.0517 170.0815,-182.3082\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"174.4306,-176.3714 172.8349,-183.8799 172.3622,-179.1948 170.2938,-182.0183 170.2938,-182.0183 170.2938,-182.0183 172.3622,-179.1948 167.7527,-180.1567 174.4306,-176.3714 174.4306,-176.3714\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"92\" y=\"-221.8\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2 -->\n",
|
|
"<g class=\"node\" id=\"node4\">\n",
|
|
"<title>2</title>\n",
|
|
"<g id=\"a_node4\"><a xlink:title=\"1,0\">\n",
|
|
"<ellipse cx=\"501\" cy=\"-166\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"501\" y=\"-162.3\">2</text>\n",
|
|
"</a>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"<!-- 0->2 -->\n",
|
|
"<g class=\"edge\" id=\"edge5\">\n",
|
|
"<title>0->2</title>\n",
|
|
"<path d=\"M57.4937,-227.0008C60.322,-248.5603 68.485,-284.0127 92,-302 223.6727,-402.7203 338.3791,-409.0019 465,-302 481.8069,-287.7972 492.7891,-226.2139 497.82,-190.9829\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"498.8032,-183.8915 500.9619,-191.2578 498.3225,-187.3583 497.8418,-190.8252 497.8418,-190.8252 497.8418,-190.8252 498.3225,-187.3583 494.7216,-190.3925 498.8032,-183.8915 498.8032,-183.8915\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"237\" y=\"-397.8\">a & !b & c</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"260\" y=\"-382.8\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 0->2 -->\n",
|
|
"<g class=\"edge\" id=\"edge6\">\n",
|
|
"<title>0->2</title>\n",
|
|
"<path d=\"M69.9677,-220.7287C76.4796,-225.9681 84.4448,-232.0608 92,-237 116.9686,-253.3232 122.0854,-261.6636 151,-269 179.4324,-276.2141 187.8286,-272.0781 217,-269 330.6595,-257.0067 368.9533,-262.9463 465,-201 471.8425,-196.5869 478.4844,-190.7347 484.1611,-185.081\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"489.0812,-179.9917 486.4806,-187.2139 486.6485,-182.5081 484.2158,-185.0245 484.2158,-185.0245 484.2158,-185.0245 486.6485,-182.5081 481.9511,-182.835 489.0812,-179.9917 489.0812,-179.9917\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"251\" y=\"-283.8\">a & b</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"252\" y=\"-269.8\">❶</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"268\" y=\"-269.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3 -->\n",
|
|
"<g class=\"node\" id=\"node5\">\n",
|
|
"<title>3</title>\n",
|
|
"<g id=\"a_node5\"><a xlink:title=\"1,1\">\n",
|
|
"<ellipse cx=\"350\" cy=\"-18\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"350\" y=\"-14.3\">3</text>\n",
|
|
"</a>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"<!-- 0->3 -->\n",
|
|
"<g class=\"edge\" id=\"edge7\">\n",
|
|
"<title>0->3</title>\n",
|
|
"<path d=\"M60.2241,-191.2285C65.2872,-172.9589 75.2557,-144.5009 92,-125 140.7669,-68.2044 164.8339,-62.0897 235,-36 264.5685,-25.0056 300.8376,-20.7266 324.6407,-19.0612\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"331.9067,-18.6071 325.1168,-22.1877 328.4135,-18.8254 324.9203,-19.0438 324.9203,-19.0438 324.9203,-19.0438 328.4135,-18.8254 324.7238,-15.8999 331.9067,-18.6071 331.9067,-18.6071\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"151\" y=\"-75.8\">a & !b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge8\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path d=\"M165.9157,-162.2091C146.7658,-164.0546 116.042,-168.6554 92,-180 85.8169,-182.9176 79.7625,-187.1046 74.4358,-191.3933\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"68.9697,-196.0314 72.2691,-189.1005 71.6385,-193.7669 74.3072,-191.5024 74.3072,-191.5024 74.3072,-191.5024 71.6385,-193.7669 76.3453,-193.9043 68.9697,-196.0314 68.9697,-196.0314\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"94\" y=\"-198.8\">!b & c</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"104.5\" y=\"-183.8\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->0 -->\n",
|
|
"<g class=\"edge\" id=\"edge9\">\n",
|
|
"<title>1->0</title>\n",
|
|
"<path d=\"M169.2656,-149.9917C150.1868,-137.1992 116.4841,-119.6835 92,-135 74.9371,-145.6741 65.7518,-167.0092 60.9411,-184.0397\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"59.137,-191.0313 57.836,-183.4663 60.0115,-187.6423 60.8861,-184.2533 60.8861,-184.2533 60.8861,-184.2533 60.0115,-187.6423 63.9361,-185.0404 59.137,-191.0313 59.137,-191.0313\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"95.5\" y=\"-152.8\">b & c</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"96.5\" y=\"-138.8\">❶</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"112.5\" y=\"-138.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g class=\"edge\" id=\"edge10\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path d=\"M177.798,-178.0373C176.5323,-187.8579 178.5996,-197 184,-197 188.0503,-197 190.2257,-191.8576 190.5264,-185.1433\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"190.202,-178.0373 193.668,-184.8864 190.3616,-181.5337 190.5213,-185.03 190.5213,-185.03 190.5213,-185.03 190.3616,-181.5337 187.3746,-185.1737 190.202,-178.0373 190.202,-178.0373\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"163.5\" y=\"-200.8\">!b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->1 -->\n",
|
|
"<g class=\"edge\" id=\"edge11\">\n",
|
|
"<title>1->1</title>\n",
|
|
"<path d=\"M174.3645,-176.4784C167.5265,-194.3259 170.7383,-215 184,-215 195.604,-215 199.5136,-199.1714 195.7287,-183.2578\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"193.6355,-176.4784 198.7104,-182.2375 194.6681,-179.8226 195.7006,-183.1668 195.7006,-183.1668 195.7006,-183.1668 194.6681,-179.8226 192.6908,-184.0962 193.6355,-176.4784 193.6355,-176.4784\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"165.5\" y=\"-233.8\">b & !c</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"176\" y=\"-218.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->2 -->\n",
|
|
"<g class=\"edge\" id=\"edge12\">\n",
|
|
"<title>1->2</title>\n",
|
|
"<path d=\"M200.7923,-167.9597C210.6397,-171.8629 223.3897,-176.6129 235,-180 297.7638,-198.3104 315.9837,-204.8879 381,-198 418.9684,-193.9776 428.4243,-190.9542 465,-180 469.1154,-178.7675 473.4255,-177.2751 477.5751,-175.7301\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"484.3444,-173.1169 478.9486,-178.5765 481.0793,-174.3774 477.8141,-175.6379 477.8141,-175.6379 477.8141,-175.6379 481.0793,-174.3774 476.6797,-172.6993 484.3444,-173.1169 484.3444,-173.1169\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"319\" y=\"-218.8\">a & !b & c</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"342\" y=\"-203.8\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->2 -->\n",
|
|
"<g class=\"edge\" id=\"edge13\">\n",
|
|
"<title>1->2</title>\n",
|
|
"<path d=\"M202.4134,-161.2904C256.3791,-162.1416 414.2289,-164.6314 475.9001,-165.6041\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"482.9307,-165.715 475.8819,-168.7541 479.4312,-165.6597 475.9316,-165.6045 475.9316,-165.6045 475.9316,-165.6045 479.4312,-165.6597 475.9813,-162.4549 482.9307,-165.715 482.9307,-165.715\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"321\" y=\"-181.8\">a & b & c</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"334\" y=\"-167.8\">❶</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"350\" y=\"-167.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->3 -->\n",
|
|
"<g class=\"edge\" id=\"edge14\">\n",
|
|
"<title>1->3</title>\n",
|
|
"<path d=\"M200.4219,-153.296C232.1597,-138.3857 298.9958,-106.8751 301,-105 319.8277,-87.385 333.318,-60.8712 341.3175,-41.745\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"344.016,-35.0628 344.3156,-42.7331 342.7054,-38.3082 341.3947,-41.5536 341.3947,-41.5536 341.3947,-41.5536 342.7054,-38.3082 338.4739,-40.374 344.016,-35.0628 344.016,-35.0628\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"235\" y=\"-138.8\">a & !b & !c</text>\n",
|
|
"</g>\n",
|
|
"<!-- 1->3 -->\n",
|
|
"<g class=\"edge\" id=\"edge15\">\n",
|
|
"<title>1->3</title>\n",
|
|
"<path d=\"M189.9265,-144.0001C197.5893,-124.1867 212.6594,-91.545 235,-71 249.0067,-58.1191 296.661,-38.4218 326.0487,-27.018\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"332.7377,-24.443 327.3367,-29.8976 329.4713,-25.7004 326.205,-26.9579 326.205,-26.9579 326.205,-26.9579 329.4713,-25.7004 325.0733,-24.0182 332.7377,-24.443 332.7377,-24.443\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"237\" y=\"-89.8\">a & b & !c</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"260\" y=\"-74.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2->2 -->\n",
|
|
"<g class=\"edge\" id=\"edge16\">\n",
|
|
"<title>2->2</title>\n",
|
|
"<path d=\"M494.9752,-183.0373C493.7456,-192.8579 495.7539,-202 501,-202 504.9346,-202 507.0479,-196.8576 507.3399,-190.1433\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"507.0248,-183.0373 510.4819,-189.8909 507.1799,-186.5339 507.335,-190.0304 507.335,-190.0304 507.335,-190.0304 507.1799,-186.5339 504.1881,-190.17 507.0248,-183.0373 507.0248,-183.0373\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"470\" y=\"-219.8\">a & !b & c</text>\n",
|
|
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"485\" y=\"-205.8\">⓿</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"501\" y=\"-205.8\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2->2 -->\n",
|
|
"<g class=\"edge\" id=\"edge17\">\n",
|
|
"<title>2->2</title>\n",
|
|
"<path d=\"M492.0632,-181.6856C484.8726,-202.4825 487.8516,-230 501,-230 512.7617,-230 516.3859,-207.9809 511.8726,-188.45\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"509.9368,-181.6856 514.8912,-187.5487 510.8998,-185.0505 511.8628,-188.4154 511.8628,-188.4154 511.8628,-188.4154 510.8998,-185.0505 508.8343,-189.2821 509.9368,-181.6856 509.9368,-181.6856\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"484\" y=\"-247.8\">a & b</text>\n",
|
|
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"477\" y=\"-233.8\">⓿</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"493\" y=\"-233.8\">❶</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"509\" y=\"-233.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 2->3 -->\n",
|
|
"<g class=\"edge\" id=\"edge18\">\n",
|
|
"<title>2->3</title>\n",
|
|
"<path d=\"M498.8154,-148.1208C495.3105,-126.9451 486.485,-91.9147 465,-71 442.7414,-49.3323 427.0735,-61.2971 399,-48 389.5177,-43.5087 379.5551,-37.6434 371.1078,-32.2914\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"364.9765,-28.3301 372.5656,-29.483 367.9163,-30.2294 370.8561,-32.1288 370.8561,-32.1288 370.8561,-32.1288 367.9163,-30.2294 369.1467,-34.7746 364.9765,-28.3301 364.9765,-28.3301\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"399\" y=\"-89.8\">a & !b & !c</text>\n",
|
|
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"424\" y=\"-74.8\">⓿</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->2 -->\n",
|
|
"<g class=\"edge\" id=\"edge19\">\n",
|
|
"<title>3->2</title>\n",
|
|
"<path d=\"M366.9255,-11.692C391.3867,-3.776 436.7742,6.2531 465,-16 484.3223,-31.2336 494.4537,-101.8785 498.6333,-140.5408\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"499.3909,-147.8209 495.5332,-141.1846 499.0286,-144.3397 498.6663,-140.8585 498.6663,-140.8585 498.6663,-140.8585 499.0286,-144.3397 501.7994,-140.5325 499.3909,-147.8209 499.3909,-147.8209\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"401\" y=\"-33.8\">a & !b & c</text>\n",
|
|
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"416\" y=\"-19.8\">⓿</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"432\" y=\"-19.8\">❶</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->2 -->\n",
|
|
"<g class=\"edge\" id=\"edge20\">\n",
|
|
"<title>3->2</title>\n",
|
|
"<path d=\"M355.9434,-35.035C363.2891,-53.7228 377.5133,-83.3956 399,-101 423.0284,-120.6869 439.3403,-106.4924 465,-124 473.2182,-129.6072 480.6802,-137.554 486.6524,-145.0286\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"490.9167,-150.6059 484.1626,-146.9584 488.7908,-147.8255 486.665,-145.0451 486.665,-145.0451 486.665,-145.0451 488.7908,-147.8255 489.1673,-143.1318 490.9167,-150.6059 490.9167,-150.6059\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"403\" y=\"-141.8\">a & b & c</text>\n",
|
|
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"408\" y=\"-127.8\">⓿</text>\n",
|
|
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"424\" y=\"-127.8\">❶</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"440\" y=\"-127.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->3 -->\n",
|
|
"<g class=\"edge\" id=\"edge21\">\n",
|
|
"<title>3->3</title>\n",
|
|
"<path d=\"M342.793,-34.6641C341.1914,-44.625 343.5938,-54 350,-54 354.8047,-54 357.3572,-48.7266 357.6575,-41.8876\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"357.207,-34.6641 360.7867,-41.4544 357.4249,-38.1573 357.6428,-41.6505 357.6428,-41.6505 357.6428,-41.6505 357.4249,-38.1573 354.4989,-41.8466 357.207,-34.6641 357.207,-34.6641\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"317\" y=\"-72.8\">a & !b & !c</text>\n",
|
|
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"342\" y=\"-57.8\">⓿</text>\n",
|
|
"</g>\n",
|
|
"<!-- 3->3 -->\n",
|
|
"<g class=\"edge\" id=\"edge22\">\n",
|
|
"<title>3->3</title>\n",
|
|
"<path d=\"M339.6258,-32.9823C330.4462,-54.4094 333.9043,-84 350,-84 364.461,-84 368.721,-60.1148 362.78,-39.7239\" fill=\"none\" stroke=\"#000000\"/>\n",
|
|
"<polygon fill=\"#000000\" points=\"360.3742,-32.9823 365.6937,-38.5163 361.5506,-36.2787 362.727,-39.5751 362.727,-39.5751 362.727,-39.5751 361.5506,-36.2787 359.7602,-40.6338 360.3742,-32.9823 360.3742,-32.9823\" stroke=\"#000000\"/>\n",
|
|
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"319\" y=\"-101.8\">a & b & !c</text>\n",
|
|
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"334\" y=\"-87.8\">⓿</text>\n",
|
|
"<text fill=\"#ff7f00\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"350\" y=\"-87.8\">❷</text>\n",
|
|
"</g>\n",
|
|
"</g>\n",
|
|
"</svg>"
|
|
],
|
|
"text/plain": [
|
|
"<IPython.core.display.SVG object>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"0: (0, 0)\n",
|
|
"1: (0, 1)\n",
|
|
"2: (1, 0)\n",
|
|
"3: (1, 1)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"display(p3.show('.1'))\n",
|
|
"pairs = p3.get_product_states()\n",
|
|
"for s in range(p3.num_states()):\n",
|
|
" print(\"{}: {}\".format(s, pairs[s]))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Timings\n",
|
|
"\n",
|
|
"As an indication of how slow it is to implement such an algorithm using the Python bindings of Spot, consider the following comparison:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"264 µs ± 2.11 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"%timeit product3(a1, a2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"4.9 µs ± 45.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"%timeit spot.product(a1, a2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Depending on the machine where this notebook has been run, using the C++ version of the product can be 1 to 2 orders of magnitude faster. This is due to all the type conversions (converting Python types to C++ types) that occurs everytime a function/method of Spot is called from Python. When calling high-level C++ functions (such as `spot.product()`) from Python, the overhead is negligible because most of the time is spent on the C++ side, actually executing the function. However when calling low-level functions (such as `new_edge()`, `new_state()`, `out()`) most of the time is spent converting the arguments from Python to C++ and the results from C++ to Python.\n",
|
|
"\n",
|
|
"Despite that speed difference, Python can be useful to prototype an algorithm before implementing it in C++."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# The case of weak automata\n",
|
|
"\n",
|
|
"Finally, note that `spot.product()` actually does a bit more: it has some specializations for when one of the argument of the product is marked as weak (as indicated by `prop_weak()`). In this case, the resulting acceptance condition can be simplified a bit."
|
|
]
|
|
},
|
|
{
|
|
"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.6.5"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|