spot/tests/python/stutter-inv-states.ipynb
Alexandre Duret-Lutz 9b18729721 stutter: detect stutter-invariance at the state level
* spot/twaalgos/stutter.cc, spot/twaalgos/stutter.hh: Implement
stutter-invariance detection at the state level.
* python/spot/impl.i: Instantiate std::vector<bool>
* tests/python/stutter-inv-states.ipynb: New file.
* tests/Makefile.am, doc/org/tut.org: Add it.
2017-10-11 15:01:29 +02:00

1765 lines
131 KiB
Text

{
"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.5.4"
},
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"import spot\n",
"spot.setup(show_default='.ba')\n",
"from IPython.display import display"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Detecting stutter-invariant states\n",
"\n",
"Spot can easily check whether a formula is stutter invariant. The check is automaton-based, so it can detect stutter invariant formulas even if they use the `X` operator as `f1` below."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"f1 = spot.formula('F(a & X!a & XF(b & X!b & Ga))')\n",
"f2 = spot.formula('F(a & Xa & XXa & G!b)')\n",
"f = spot.formula_Or([f1, f2])\n",
"\n",
"print(spot.is_stutter_invariant(f1))\n",
"print(spot.is_stutter_invariant(f2))\n",
"print(spot.is_stutter_invariant(f))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"True\n",
"False\n",
"False\n"
]
}
],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"pos = spot.translate(f)\n",
"display(pos)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"svg": [
"<?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.38.0 (20140413.2041)\n",
" -->\n",
"<!-- Title: G Pages: 1 -->\n",
"<svg width=\"518pt\" height=\"230pt\"\n",
" viewBox=\"0.00 0.00 518.00 230.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 226)\">\n",
"<title>G</title>\n",
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-226 514,-226 514,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"234\" y=\"-207.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"256\" y=\"-207.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"<text text-anchor=\"start\" x=\"272\" y=\"-207.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"232\" y=\"-193.8\" font-family=\"Lato\" font-size=\"14.00\">[B\u00fcchi]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\"><title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-78\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-74.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\"><title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15491,-78C2.79388,-78 17.1543,-78 30.6317,-78\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.9419,-78 30.9419,-81.1501 34.4419,-78 30.9419,-78.0001 30.9419,-78.0001 30.9419,-78.0001 34.4419,-78 30.9418,-74.8501 37.9419,-78 37.9419,-78\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\"><title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.6208,-95.0373C48.3189,-104.858 50.4453,-114 56,-114 60.166,-114 62.4036,-108.858 62.7128,-102.143\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"62.3792,-95.0373 65.8541,-101.882 62.5434,-98.5335 62.7076,-102.03 62.7076,-102.03 62.7076,-102.03 62.5434,-98.5335 59.561,-102.177 62.3792,-95.0373 62.3792,-95.0373\"/>\n",
"<text text-anchor=\"start\" x=\"51.5\" y=\"-117.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\"><title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"165\" cy=\"-103\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"160.5\" y=\"-99.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge3\" class=\"edge\"><title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.7188,-81.9062C91.6218,-86.0892 120.176,-92.7606 140.371,-97.4793\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"147.399,-99.1212 139.866,-100.596 143.99,-98.3248 140.582,-97.5285 140.582,-97.5285 140.582,-97.5285 143.99,-98.3248 141.299,-94.4611 147.399,-99.1212 147.399,-99.1212\"/>\n",
"<text text-anchor=\"start\" x=\"107\" y=\"-98.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\"><title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"165\" cy=\"-49\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"165\" y=\"-45.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge4\" class=\"edge\"><title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.7153,-73.1495C79.4994,-71.4909 86.0282,-69.6409 92,-68 108.136,-63.5664 126.361,-58.7589 140.438,-55.0891\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"147.388,-53.2817 141.406,-58.0921 144.001,-54.1626 140.613,-55.0435 140.613,-55.0435 140.613,-55.0435 144.001,-54.1626 139.82,-51.9949 147.388,-53.2817 147.388,-53.2817\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-71.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\"><title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"274\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"274\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;3 -->\n",
"<g id=\"edge5\" class=\"edge\"><title>1&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M183.191,-103.321C200.897,-103.652 228.648,-104.171 248.616,-104.544\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"255.851,-104.679 248.794,-107.698 252.352,-104.614 248.852,-104.549 248.852,-104.549 248.852,-104.549 252.352,-104.614 248.911,-101.399 255.851,-104.679 255.851,-104.679\"/>\n",
"<text text-anchor=\"start\" x=\"214\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node6\" class=\"node\"><title>5</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"274\" cy=\"-48\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"274\" y=\"-44.3\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;5 -->\n",
"<g id=\"edge6\" class=\"edge\"><title>2&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M183.191,-48.8393C200.897,-48.6739 228.648,-48.4145 248.616,-48.2279\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"255.851,-48.1603 248.881,-51.3756 252.351,-48.193 248.852,-48.2258 248.852,-48.2258 248.852,-48.2258 252.351,-48.193 248.822,-45.0759 255.851,-48.1603 255.851,-48.1603\"/>\n",
"<text text-anchor=\"start\" x=\"201\" y=\"-52.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge7\" class=\"edge\"><title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M264.767,-120.541C262.169,-130.909 265.246,-141 274,-141 280.702,-141 284.077,-135.085 284.124,-127.659\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"283.233,-120.541 287.229,-127.095 283.668,-124.014 284.103,-127.487 284.103,-127.487 284.103,-127.487 283.668,-124.014 280.977,-127.879 283.233,-120.541 283.233,-120.541\"/>\n",
"<text text-anchor=\"start\" x=\"269.5\" y=\"-144.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node7\" class=\"node\"><title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"383\" cy=\"-120\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"383\" y=\"-116.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge8\" class=\"edge\"><title>3&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M292.191,-107.41C309.975,-109.903 337.892,-113.817 357.88,-116.619\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"364.851,-117.596 357.482,-119.744 361.385,-117.11 357.919,-116.624 357.919,-116.624 357.919,-116.624 361.385,-117.11 358.356,-113.505 364.851,-117.596 364.851,-117.596\"/>\n",
"<text text-anchor=\"start\" x=\"311.5\" y=\"-118.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node9\" class=\"node\"><title>6</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"383\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"383\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;6 -->\n",
"<g id=\"edge10\" class=\"edge\"><title>5&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M291.719,-43.3125C309.7,-38.2709 338.426,-30.2169 358.637,-24.5505\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"365.399,-22.6546 359.509,-27.5774 362.029,-23.5995 358.659,-24.5444 358.659,-24.5444 358.659,-24.5444 362.029,-23.5995 357.808,-21.5114 365.399,-22.6546 365.399,-22.6546\"/>\n",
"<text text-anchor=\"start\" x=\"310\" y=\"-41.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node8\" class=\"node\"><title>7</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"492\" cy=\"-120\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"492\" y=\"-116.3\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;7 -->\n",
"<g id=\"edge9\" class=\"edge\"><title>4&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M401.191,-120C418.897,-120 446.648,-120 466.616,-120\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"473.851,-120 466.851,-123.15 470.351,-120 466.851,-120 466.851,-120 466.851,-120 470.351,-120 466.851,-116.85 473.851,-120 473.851,-120\"/>\n",
"<text text-anchor=\"start\" x=\"419\" y=\"-123.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;7 -->\n",
"<g id=\"edge12\" class=\"edge\"><title>7&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M482.767,-135.541C480.169,-145.909 483.246,-156 492,-156 498.702,-156 502.077,-150.085 502.124,-142.659\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"501.233,-135.541 505.229,-142.095 501.668,-139.014 502.103,-142.487 502.103,-142.487 502.103,-142.487 501.668,-139.014 498.977,-142.879 501.233,-135.541 501.233,-135.541\"/>\n",
"<text text-anchor=\"start\" x=\"488.5\" y=\"-174.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"484\" y=\"-159.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;6 -->\n",
"<g id=\"edge11\" class=\"edge\"><title>6&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M373.767,-33.5414C371.169,-43.9087 374.246,-54 383,-54 389.702,-54 393.077,-48.0847 393.124,-40.6591\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"392.233,-33.5414 396.229,-40.0955 392.668,-37.0143 393.103,-40.4871 393.103,-40.4871 393.103,-40.4871 392.668,-37.0143 389.977,-40.8788 392.233,-33.5414 392.233,-33.5414\"/>\n",
"<text text-anchor=\"start\" x=\"376.5\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"375\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f0b7c1b58d0> >"
]
}
],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"While the automaton as a whole is stutter-sensitive, but we can see that eventually we will enter a sub-automaton that is stutter-invariant.\n",
"\n",
"The `stutter_invariant_states()` function returns a Boolean vector indiced by the state number."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"spot.stutter_invariant_states(pos, f)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 4,
"text": [
"(False, True, False, True, True, True, True, True)"
]
}
],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `highligh_...()` version colors the stutter-invariant states of the automaton for display.\n",
"(That 5 is the color number for red.)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"spot.highlight_stutter_invariant_states(pos, f, 5)\n",
"display(pos)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"svg": [
"<?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.38.0 (20140413.2041)\n",
" -->\n",
"<!-- Title: G Pages: 1 -->\n",
"<svg width=\"518pt\" height=\"230pt\"\n",
" viewBox=\"0.00 0.00 518.00 230.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 226)\">\n",
"<title>G</title>\n",
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-226 514,-226 514,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"234\" y=\"-207.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"256\" y=\"-207.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"<text text-anchor=\"start\" x=\"272\" y=\"-207.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"232\" y=\"-193.8\" font-family=\"Lato\" font-size=\"14.00\">[B\u00fcchi]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\"><title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-78\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-74.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\"><title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15491,-78C2.79388,-78 17.1543,-78 30.6317,-78\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.9419,-78 30.9419,-81.1501 34.4419,-78 30.9419,-78.0001 30.9419,-78.0001 30.9419,-78.0001 34.4419,-78 30.9418,-74.8501 37.9419,-78 37.9419,-78\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\"><title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.6208,-95.0373C48.3189,-104.858 50.4453,-114 56,-114 60.166,-114 62.4036,-108.858 62.7128,-102.143\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"62.3792,-95.0373 65.8541,-101.882 62.5434,-98.5335 62.7076,-102.03 62.7076,-102.03 62.7076,-102.03 62.5434,-98.5335 59.561,-102.177 62.3792,-95.0373 62.3792,-95.0373\"/>\n",
"<text text-anchor=\"start\" x=\"51.5\" y=\"-117.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\"><title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"165\" cy=\"-103\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"160.5\" y=\"-99.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge3\" class=\"edge\"><title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.7188,-81.9062C91.6218,-86.0892 120.176,-92.7606 140.371,-97.4793\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"147.399,-99.1212 139.866,-100.596 143.99,-98.3248 140.582,-97.5285 140.582,-97.5285 140.582,-97.5285 143.99,-98.3248 141.299,-94.4611 147.399,-99.1212 147.399,-99.1212\"/>\n",
"<text text-anchor=\"start\" x=\"107\" y=\"-98.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\"><title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"165\" cy=\"-49\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"165\" y=\"-45.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge4\" class=\"edge\"><title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.7153,-73.1495C79.4994,-71.4909 86.0282,-69.6409 92,-68 108.136,-63.5664 126.361,-58.7589 140.438,-55.0891\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"147.388,-53.2817 141.406,-58.0921 144.001,-54.1626 140.613,-55.0435 140.613,-55.0435 140.613,-55.0435 144.001,-54.1626 139.82,-51.9949 147.388,-53.2817 147.388,-53.2817\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-71.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\"><title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"274\" cy=\"-105\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"274\" y=\"-101.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;3 -->\n",
"<g id=\"edge5\" class=\"edge\"><title>1&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M183.191,-103.321C200.897,-103.652 228.648,-104.171 248.616,-104.544\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"255.851,-104.679 248.794,-107.698 252.352,-104.614 248.852,-104.549 248.852,-104.549 248.852,-104.549 252.352,-104.614 248.911,-101.399 255.851,-104.679 255.851,-104.679\"/>\n",
"<text text-anchor=\"start\" x=\"214\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node6\" class=\"node\"><title>5</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"274\" cy=\"-48\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"274\" y=\"-44.3\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;5 -->\n",
"<g id=\"edge6\" class=\"edge\"><title>2&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M183.191,-48.8393C200.897,-48.6739 228.648,-48.4145 248.616,-48.2279\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"255.851,-48.1603 248.881,-51.3756 252.351,-48.193 248.852,-48.2258 248.852,-48.2258 248.852,-48.2258 252.351,-48.193 248.822,-45.0759 255.851,-48.1603 255.851,-48.1603\"/>\n",
"<text text-anchor=\"start\" x=\"201\" y=\"-52.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge7\" class=\"edge\"><title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M264.767,-120.541C262.169,-130.909 265.246,-141 274,-141 280.702,-141 284.077,-135.085 284.124,-127.659\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"283.233,-120.541 287.229,-127.095 283.668,-124.014 284.103,-127.487 284.103,-127.487 284.103,-127.487 283.668,-124.014 280.977,-127.879 283.233,-120.541 283.233,-120.541\"/>\n",
"<text text-anchor=\"start\" x=\"269.5\" y=\"-144.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node7\" class=\"node\"><title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"383\" cy=\"-120\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"383\" y=\"-116.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge8\" class=\"edge\"><title>3&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M292.191,-107.41C309.975,-109.903 337.892,-113.817 357.88,-116.619\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"364.851,-117.596 357.482,-119.744 361.385,-117.11 357.919,-116.624 357.919,-116.624 357.919,-116.624 361.385,-117.11 358.356,-113.505 364.851,-117.596 364.851,-117.596\"/>\n",
"<text text-anchor=\"start\" x=\"311.5\" y=\"-118.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node9\" class=\"node\"><title>6</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"383\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"383\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">6</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;6 -->\n",
"<g id=\"edge10\" class=\"edge\"><title>5&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M291.719,-43.3125C309.7,-38.2709 338.426,-30.2169 358.637,-24.5505\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"365.399,-22.6546 359.509,-27.5774 362.029,-23.5995 358.659,-24.5444 358.659,-24.5444 358.659,-24.5444 362.029,-23.5995 357.808,-21.5114 365.399,-22.6546 365.399,-22.6546\"/>\n",
"<text text-anchor=\"start\" x=\"310\" y=\"-41.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node8\" class=\"node\"><title>7</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"492\" cy=\"-120\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"492\" y=\"-116.3\" font-family=\"Lato\" font-size=\"14.00\">7</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;7 -->\n",
"<g id=\"edge9\" class=\"edge\"><title>4&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M401.191,-120C418.897,-120 446.648,-120 466.616,-120\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"473.851,-120 466.851,-123.15 470.351,-120 466.851,-120 466.851,-120 466.851,-120 470.351,-120 466.851,-116.85 473.851,-120 473.851,-120\"/>\n",
"<text text-anchor=\"start\" x=\"419\" y=\"-123.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;7 -->\n",
"<g id=\"edge12\" class=\"edge\"><title>7&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M482.767,-135.541C480.169,-145.909 483.246,-156 492,-156 498.702,-156 502.077,-150.085 502.124,-142.659\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"501.233,-135.541 505.229,-142.095 501.668,-139.014 502.103,-142.487 502.103,-142.487 502.103,-142.487 501.668,-139.014 498.977,-142.879 501.233,-135.541 501.233,-135.541\"/>\n",
"<text text-anchor=\"start\" x=\"488.5\" y=\"-174.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"484\" y=\"-159.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;6 -->\n",
"<g id=\"edge11\" class=\"edge\"><title>6&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M373.767,-33.5414C371.169,-43.9087 374.246,-54 383,-54 389.702,-54 393.077,-48.0847 393.124,-40.6591\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"392.233,-33.5414 396.229,-40.0955 392.668,-37.0143 393.103,-40.4871 393.103,-40.4871 393.103,-40.4871 392.668,-37.0143 389.977,-40.8788 392.233,-33.5414 392.233,-33.5414\"/>\n",
"<text text-anchor=\"start\" x=\"376.5\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"375\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f0b7c1b58d0> >"
]
}
],
"prompt_number": 5
},
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"Another test case"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The union of two stutter-sensitive formulas can be stutter-invariant. Let's make sure that our checks agree."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"g1 = spot.formula('GF(a & Xa) & GF!a')\n",
"g2 = spot.formula('!GF(a & Xa) & GF!a')\n",
"g = spot.formula_Or([g1, g2])"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print(spot.is_stutter_invariant(g1))\n",
"print(spot.is_stutter_invariant(g2))\n",
"print(spot.is_stutter_invariant(g))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"False\n",
"False\n",
"True\n"
]
}
],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"aut1 = spot.translate(g1)\n",
"aut2 = spot.translate(g2)\n",
"aut = spot.product_or(aut1, aut2)\n",
"spot.highlight_stutter_invariant_states(aut1, g1, 5)\n",
"display(aut1)\n",
"spot.highlight_stutter_invariant_states(aut2, g2, 5)\n",
"display(aut2)\n",
"# At this point it is unknown if AUT is stutter-invariant\n",
"assert(aut.prop_stutter_invariant().is_maybe())\n",
"spot.highlight_stutter_invariant_states(aut, g, 5)\n",
"display(aut)\n",
"# The stutter_invariant property is set on AUT as a side effect\n",
"# of calling sutter_invariant_states() or some variant of it.\n",
"assert(aut.prop_stutter_invariant().is_true())"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"svg": [
"<?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.38.0 (20140413.2041)\n",
" -->\n",
"<!-- Title: G Pages: 1 -->\n",
"<svg width=\"170pt\" height=\"164pt\"\n",
" viewBox=\"0.00 0.00 170.00 163.75\" 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 159.75)\">\n",
"<title>G</title>\n",
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-159.75 166,-159.75 166,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"34\" y=\"-141.55\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"56\" y=\"-141.55\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"<text text-anchor=\"start\" x=\"72\" y=\"-141.55\" font-family=\"Lato\" font-size=\"14.00\">)&amp;Inf(</text>\n",
"<text text-anchor=\"start\" x=\"108\" y=\"-141.55\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">\u2776</text>\n",
"<text text-anchor=\"start\" x=\"124\" y=\"-141.55\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"37\" y=\"-127.55\" font-family=\"Lato\" font-size=\"14.00\">[gen. B\u00fcchi 2]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\"><title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-20.7502\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-17.0502\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\"><title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15491,-20.7502C2.79388,-20.7502 17.1543,-20.7502 30.6317,-20.7502\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.9419,-20.7502 30.9419,-23.9003 34.4419,-20.7502 30.9419,-20.7503 30.9419,-20.7503 30.9419,-20.7503 34.4419,-20.7502 30.9418,-17.6003 37.9419,-20.7502 37.9419,-20.7502\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\"><title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M52.7643,-38.5319C52.2144,-48.0651 53.293,-56.7502 56,-56.7502 57.988,-56.7502 59.0977,-52.0663 59.3292,-45.8023\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"59.2357,-38.5319 62.4756,-45.4908 59.2808,-42.0316 59.3258,-45.5313 59.3258,-45.5313 59.3258,-45.5313 59.2808,-42.0316 56.1761,-45.5719 59.2357,-38.5319 59.2357,-38.5319\"/>\n",
"<text text-anchor=\"start\" x=\"50.5\" y=\"-75.5502\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"48\" y=\"-60.5502\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">\u2776</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\"><title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M50.9906,-38.3273C47.5451,-59.4682 49.2148,-86.7502 56,-86.7502 62.043,-86.7502 64.0285,-65.1097 61.9564,-45.4408\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"61.0094,-38.3273 65.0556,-44.8504 61.4713,-41.7967 61.9332,-45.2661 61.9332,-45.2661 61.9332,-45.2661 61.4713,-41.7967 58.8107,-45.6818 61.0094,-38.3273 61.0094,-38.3273\"/>\n",
"<text text-anchor=\"start\" x=\"52.5\" y=\"-90.5502\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\"><title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"144\" cy=\"-20.7502\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"144\" y=\"-17.0502\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge4\" class=\"edge\"><title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.4034,-20.7502C87.1928,-20.7502 104.732,-20.7502 118.874,-20.7502\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"125.916,-20.7502 118.916,-23.9003 122.416,-20.7502 118.916,-20.7503 118.916,-20.7503 118.916,-20.7503 122.416,-20.7502 118.916,-17.6003 125.916,-20.7502 125.916,-20.7502\"/>\n",
"<text text-anchor=\"start\" x=\"96.5\" y=\"-39.5502\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-24.5502\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge5\" class=\"edge\"><title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M128.689,-10.8844C122.598,-7.25669 115.237,-3.58794 108,-1.75016 101.108,-0 98.8924,-0 92,-1.75016 87.1374,-2.98492 82.2193,-5.0462 77.668,-7.36626\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"71.3113,-10.8844 75.9105,-4.73864 74.3736,-9.18956 77.4359,-7.49469 77.4359,-7.49469 77.4359,-7.49469 74.3736,-9.18956 78.9613,-10.2507 71.3113,-10.8844 71.3113,-10.8844\"/>\n",
"<text text-anchor=\"start\" x=\"96.5\" y=\"-5.55016\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\"><title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M136.332,-37.0404C134.483,-47.1393 137.039,-56.7502 144,-56.7502 149.221,-56.7502 151.964,-51.3441 152.229,-44.3805\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"151.668,-37.0404 155.342,-43.7801 151.935,-40.5303 152.201,-44.0201 152.201,-44.0201 152.201,-44.0201 151.935,-40.5303 149.06,-44.2601 151.668,-37.0404 151.668,-37.0404\"/>\n",
"<text text-anchor=\"start\" x=\"140.5\" y=\"-75.5502\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"136\" y=\"-60.5502\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f0b7c1b5660> >"
]
},
{
"metadata": {},
"output_type": "display_data",
"svg": [
"<?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.38.0 (20140413.2041)\n",
" -->\n",
"<!-- Title: G Pages: 1 -->\n",
"<svg width=\"253pt\" height=\"158pt\"\n",
" viewBox=\"0.00 0.00 253.00 158.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 154)\">\n",
"<title>G</title>\n",
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-154 249,-154 249,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"101.5\" y=\"-135.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"123.5\" y=\"-135.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"<text text-anchor=\"start\" x=\"139.5\" y=\"-135.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"99.5\" y=\"-121.8\" font-family=\"Lato\" font-size=\"14.00\">[B\u00fcchi]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\"><title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\"><title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15491,-18C2.79388,-18 17.1543,-18 30.6317,-18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.9419,-18 30.9419,-21.1501 34.4419,-18 30.9419,-18.0001 30.9419,-18.0001 30.9419,-18.0001 34.4419,-18 30.9418,-14.8501 37.9419,-18 37.9419,-18\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\"><title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.6208,-35.0373C48.3189,-44.8579 50.4453,-54 56,-54 60.166,-54 62.4036,-48.8576 62.7128,-42.1433\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"62.3792,-35.0373 65.8541,-41.8818 62.5434,-38.5335 62.7076,-42.0296 62.7076,-42.0296 62.7076,-42.0296 62.5434,-38.5335 59.561,-42.1774 62.3792,-35.0373 62.3792,-35.0373\"/>\n",
"<text text-anchor=\"start\" x=\"51.5\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\"><title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"139\" cy=\"-48\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"134.5\" y=\"-44.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge3\" class=\"edge\"><title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.003,-23.927C85.017,-28.3767 101.638,-34.5325 115.064,-39.5053\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"121.753,-41.9826 114.095,-42.5052 118.471,-40.767 115.189,-39.5513 115.189,-39.5513 115.189,-39.5513 118.471,-40.767 116.283,-36.5974 121.753,-41.9826 121.753,-41.9826\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-37.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\"><title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"227\" cy=\"-30\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"227\" y=\"-26.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge4\" class=\"edge\"><title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.3505,-13.1706C93.2093,-7.96467 127.69,-1.04806 157,-6 173.081,-8.71684 190.415,-14.7595 203.687,-20.1014\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"210.229,-22.8097 202.557,-23.0425 206.995,-21.4709 203.762,-20.1321 203.762,-20.1321 203.762,-20.1321 206.995,-21.4709 204.966,-17.2216 210.229,-22.8097 210.229,-22.8097\"/>\n",
"<text text-anchor=\"start\" x=\"135.5\" y=\"-9.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge5\" class=\"edge\"><title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M131.969,-64.6641C130.406,-74.625 132.75,-84 139,-84 143.688,-84 146.178,-78.7266 146.471,-71.8876\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"146.031,-64.6641 149.601,-71.4598 146.244,-68.1576 146.456,-71.6511 146.456,-71.6511 146.456,-71.6511 146.244,-68.1576 143.312,-71.8425 146.031,-64.6641 146.031,-64.6641\"/>\n",
"<text text-anchor=\"start\" x=\"133.5\" y=\"-102.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"131\" y=\"-87.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;2 -->\n",
"<g id=\"edge6\" class=\"edge\"><title>1&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M155.003,-56.5894C165.311,-61.3438 179.21,-65.4707 191,-61 197.945,-58.3667 204.396,-53.6555 209.82,-48.6883\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"214.881,-43.7031 212.105,-50.8594 212.388,-46.1591 209.894,-48.6152 209.894,-48.6152 209.894,-48.6152 212.388,-46.1591 207.684,-46.3709 214.881,-43.7031 214.881,-43.7031\"/>\n",
"<text text-anchor=\"start\" x=\"179.5\" y=\"-80.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"175\" y=\"-65.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge7\" class=\"edge\"><title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M209.173,-26.2984C199.09,-24.7439 186.112,-23.9222 175,-27 169.835,-28.4305 164.668,-30.8484 159.95,-33.5456\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"153.837,-37.33 158.131,-30.967 156.813,-35.4876 159.789,-33.6452 159.789,-33.6452 159.789,-33.6452 156.813,-35.4876 161.447,-36.3235 153.837,-37.33 153.837,-37.33\"/>\n",
"<text text-anchor=\"start\" x=\"177.5\" y=\"-45.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"175\" y=\"-30.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f0b7c1ce720> >"
]
},
{
"metadata": {},
"output_type": "display_data",
"svg": [
"<?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.38.0 (20140413.2041)\n",
" -->\n",
"<!-- Title: G Pages: 1 -->\n",
"<svg width=\"581pt\" height=\"360pt\"\n",
" viewBox=\"0.00 0.00 580.56 360.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(0.911392 0.911392) rotate(0) translate(4 391)\">\n",
"<title>G</title>\n",
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-391 633,-391 633,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"238\" y=\"-372.8\" font-family=\"Lato\" font-size=\"14.00\">(Inf(</text>\n",
"<text text-anchor=\"start\" x=\"263\" y=\"-372.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"<text text-anchor=\"start\" x=\"279\" y=\"-372.8\" font-family=\"Lato\" font-size=\"14.00\">)&amp;Inf(</text>\n",
"<text text-anchor=\"start\" x=\"315\" y=\"-372.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">\u2776</text>\n",
"<text text-anchor=\"start\" x=\"331\" y=\"-372.8\" font-family=\"Lato\" font-size=\"14.00\">)) | Inf(</text>\n",
"<text text-anchor=\"start\" x=\"371\" y=\"-372.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">\u2777</text>\n",
"<text text-anchor=\"start\" x=\"387\" y=\"-372.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\"><title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"65\" cy=\"-196\" rx=\"27\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"55\" y=\"-192.3\" font-family=\"Lato\" font-size=\"14.00\">0,0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\"><title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.04566,-196C1.94863,-196 16.101,-196 30.7579,-196\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.9378,-196 30.9378,-199.15 34.4378,-196 30.9378,-196 30.9378,-196 30.9378,-196 34.4378,-196 30.9378,-192.85 37.9378,-196 37.9378,-196\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\"><title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M61.02,-214.153C60.4077,-223.539 61.7344,-232 65,-232 67.3982,-232 68.7507,-227.437 69.0575,-221.295\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"68.98,-214.153 72.2058,-221.118 69.018,-217.653 69.056,-221.152 69.056,-221.152 69.056,-221.152 69.018,-217.653 65.9062,-221.187 68.98,-214.153 68.98,-214.153\"/>\n",
"<text text-anchor=\"start\" x=\"59.5\" y=\"-250.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"57\" y=\"-235.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">\u2776</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge4\" class=\"edge\"><title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M58.8775,-213.577C54.6662,-234.718 56.707,-262 65,-262 72.3859,-262 74.8126,-240.36 72.28,-220.691\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"71.1225,-213.577 75.3559,-219.98 71.6847,-217.032 72.2468,-220.486 72.2468,-220.486 72.2468,-220.486 71.6847,-217.032 69.1377,-220.992 71.1225,-213.577 71.1225,-213.577\"/>\n",
"<text text-anchor=\"start\" x=\"61.5\" y=\"-265.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\"><title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"171\" cy=\"-262\" rx=\"27\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"161\" y=\"-258.3\" font-family=\"Lato\" font-size=\"14.00\">0,1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge3\" class=\"edge\"><title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M85.0752,-208.105C101.829,-218.738 126.329,-234.286 144.713,-245.953\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"150.694,-249.748 143.095,-248.657 147.738,-247.872 144.783,-245.997 144.783,-245.997 144.783,-245.997 147.738,-247.872 146.471,-243.337 150.694,-249.748 150.694,-249.748\"/>\n",
"<text text-anchor=\"start\" x=\"112.5\" y=\"-250.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"110\" y=\"-235.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">\u2776</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\"><title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"293\" cy=\"-292\" rx=\"27\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"283\" y=\"-288.3\" font-family=\"Lato\" font-size=\"14.00\">0,2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge5\" class=\"edge\"><title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M69.9575,-214.149C77.8616,-245.404 98.868,-308.574 144,-335 183.895,-358.36 205.33,-350.792 248,-333 258.336,-328.69 267.734,-320.796 275.166,-313.076\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"279.985,-307.806 277.586,-315.098 277.623,-310.389 275.261,-312.972 275.261,-312.972 275.261,-312.972 277.623,-310.389 272.936,-310.846 279.985,-307.806 279.985,-307.806\"/>\n",
"<text text-anchor=\"start\" x=\"167.5\" y=\"-352.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\"><title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"171\" cy=\"-158\" rx=\"27\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"161\" y=\"-154.3\" font-family=\"Lato\" font-size=\"14.00\">1,0</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge6\" class=\"edge\"><title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M89.081,-187.567C104.161,-182.056 123.999,-174.808 140.259,-168.867\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"146.984,-166.41 141.49,-171.771 143.696,-167.611 140.409,-168.812 140.409,-168.812 140.409,-168.812 143.696,-167.611 139.328,-165.854 146.984,-166.41 146.984,-166.41\"/>\n",
"<text text-anchor=\"start\" x=\"114.5\" y=\"-197.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"110\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\"><title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"293\" cy=\"-163\" rx=\"27\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"283\" y=\"-159.3\" font-family=\"Lato\" font-size=\"14.00\">1,2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;4 -->\n",
"<g id=\"edge7\" class=\"edge\"><title>0&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.1433,-178.67C85.9114,-155.936 110.046,-117.055 144,-101 186.341,-80.9799 208.373,-93.0348 248,-118 257.915,-124.246 267.245,-133.157 274.74,-141.404\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"279.62,-146.966 272.636,-143.781 277.312,-144.335 275.003,-141.704 275.003,-141.704 275.003,-141.704 277.312,-144.335 277.371,-139.626 279.62,-146.966 279.62,-146.966\"/>\n",
"<text text-anchor=\"start\" x=\"167.5\" y=\"-119.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"163\" y=\"-104.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge8\" class=\"edge\"><title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M161.786,-279.037C159.905,-288.858 162.977,-298 171,-298 177.018,-298 180.25,-292.858 180.696,-286.143\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"180.214,-279.037 183.831,-285.808 180.451,-282.529 180.688,-286.021 180.688,-286.021 180.688,-286.021 180.451,-282.529 177.545,-286.234 180.214,-279.037 180.214,-279.037\"/>\n",
"<text text-anchor=\"start\" x=\"165.5\" y=\"-315.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"155\" y=\"-301.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">\u2776</text>\n",
"<text text-anchor=\"start\" x=\"171\" y=\"-301.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">\u2777</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;2 -->\n",
"<g id=\"edge9\" class=\"edge\"><title>1&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M186.384,-277.067C194.338,-284.295 204.854,-292.195 216,-296 230.056,-300.798 246.421,-300.611 260.357,-298.892\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"267.398,-297.872 260.922,-301.993 263.934,-298.374 260.471,-298.876 260.471,-298.876 260.471,-298.876 263.934,-298.374 260.019,-295.758 267.398,-297.872 267.398,-297.872\"/>\n",
"<text text-anchor=\"start\" x=\"228.5\" y=\"-317.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"224\" y=\"-302.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">\u2777</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;4 -->\n",
"<g id=\"edge10\" class=\"edge\"><title>1&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M187.304,-247.271C191.186,-242.951 195.079,-238.028 198,-233 210.709,-211.126 197.119,-195.838 216,-179 227.588,-168.665 244.13,-164.391 258.823,-162.816\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"265.858,-162.244 259.135,-165.951 262.369,-162.528 258.88,-162.811 258.88,-162.811 258.88,-162.811 262.369,-162.528 258.626,-159.671 265.858,-162.244 265.858,-162.244\"/>\n",
"<text text-anchor=\"start\" x=\"228.5\" y=\"-196.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"216\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"<text text-anchor=\"start\" x=\"232\" y=\"-182.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">\u2777</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge11\" class=\"edge\"><title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M275.102,-278.201C267.333,-272.693 257.698,-266.963 248,-264 234.367,-259.835 218.711,-258.828 205.164,-259.056\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"197.882,-259.298 204.774,-255.917 201.38,-259.182 204.878,-259.065 204.878,-259.065 204.878,-259.065 201.38,-259.182 204.983,-262.214 197.882,-259.298 197.882,-259.298\"/>\n",
"<text text-anchor=\"start\" x=\"226.5\" y=\"-281.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"216\" y=\"-267.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">\u2776</text>\n",
"<text text-anchor=\"start\" x=\"232\" y=\"-267.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">\u2777</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node7\" class=\"node\"><title>5</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"505\" cy=\"-257\" rx=\"27\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"495\" y=\"-253.3\" font-family=\"Lato\" font-size=\"14.00\">0,3</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;5 -->\n",
"<g id=\"edge12\" class=\"edge\"><title>2&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M319.223,-296.326C352.685,-300.949 412.998,-305.35 460,-287 467.517,-284.065 475.023,-279.644 481.652,-275.092\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"487.468,-270.913 483.621,-277.556 484.625,-272.955 481.783,-274.998 481.783,-274.998 481.783,-274.998 484.625,-272.955 479.945,-272.44 487.468,-270.913 487.468,-270.913\"/>\n",
"<text text-anchor=\"start\" x=\"395.5\" y=\"-303.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 6 -->\n",
"<g id=\"node8\" class=\"node\"><title>6</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"399\" cy=\"-171\" rx=\"27\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"389\" y=\"-167.3\" font-family=\"Lato\" font-size=\"14.00\">1,3</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;6 -->\n",
"<g id=\"edge13\" class=\"edge\"><title>2&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M307.172,-276.675C325.591,-255.246 359.11,-216.247 379.873,-192.09\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"384.607,-186.583 382.433,-193.944 382.325,-189.237 380.044,-191.891 380.044,-191.891 380.044,-191.891 382.325,-189.237 377.655,-189.838 384.607,-186.583 384.607,-186.583\"/>\n",
"<text text-anchor=\"start\" x=\"342.5\" y=\"-256.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"338\" y=\"-241.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;0 -->\n",
"<g id=\"edge14\" class=\"edge\"><title>3&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M145.31,-152.235C134.172,-150.763 121.063,-150.644 110,-155 99.5802,-159.102 90.1684,-166.963 82.7488,-174.714\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"77.9426,-180.014 80.3111,-172.713 80.2936,-177.422 82.6447,-174.829 82.6447,-174.829 82.6447,-174.829 80.2936,-177.422 84.9782,-176.945 77.9426,-180.014 77.9426,-180.014\"/>\n",
"<text text-anchor=\"start\" x=\"114.5\" y=\"-158.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;2 -->\n",
"<g id=\"edge15\" class=\"edge\"><title>3&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M185.722,-173.586C194.327,-183.283 205.703,-195.966 216,-207 229.939,-221.937 234.283,-224.86 248,-240 257.027,-249.963 266.714,-261.333 274.695,-270.894\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"279.178,-276.291 272.282,-272.92 276.941,-273.599 274.705,-270.907 274.705,-270.907 274.705,-270.907 276.941,-273.599 277.128,-268.894 279.178,-276.291 279.178,-276.291\"/>\n",
"<text text-anchor=\"start\" x=\"228.5\" y=\"-243.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge16\" class=\"edge\"><title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M161.786,-175.037C159.905,-184.858 162.977,-194 171,-194 177.018,-194 180.25,-188.858 180.696,-182.143\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"180.214,-175.037 183.831,-181.808 180.451,-178.529 180.688,-182.021 180.688,-182.021 180.688,-182.021 180.451,-178.529 177.545,-182.234 180.214,-175.037 180.214,-175.037\"/>\n",
"<text text-anchor=\"start\" x=\"167.5\" y=\"-212.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"163\" y=\"-197.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge17\" class=\"edge\"><title>3&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M187.333,-143.134C195.224,-136.515 205.401,-129.447 216,-126 229.525,-121.602 234.638,-121.129 248,-126 257.415,-129.432 266.213,-135.864 273.43,-142.414\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"278.625,-147.399 271.393,-144.825 276.099,-144.975 273.574,-142.552 273.574,-142.552 273.574,-142.552 276.099,-144.975 275.755,-140.279 278.625,-147.399 278.625,-147.399\"/>\n",
"<text text-anchor=\"start\" x=\"228.5\" y=\"-144.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"224\" y=\"-129.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"</g>\n",
"<!-- 7 -->\n",
"<g id=\"node9\" class=\"node\"><title>7</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"293\" cy=\"-62\" rx=\"27\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"283\" y=\"-58.3\" font-family=\"Lato\" font-size=\"14.00\">2,0</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;7 -->\n",
"<g id=\"edge18\" class=\"edge\"><title>3&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M184.753,-142.421C188.988,-137.216 193.716,-131.373 198,-126 206.093,-115.851 206.078,-111.37 216,-103 230.012,-91.1804 247.977,-81.2982 262.922,-74.1991\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"269.551,-71.1363 264.518,-76.9318 266.374,-72.6043 263.196,-74.0723 263.196,-74.0723 263.196,-74.0723 266.374,-72.6043 261.875,-71.2128 269.551,-71.1363 269.551,-71.1363\"/>\n",
"<text text-anchor=\"start\" x=\"226.5\" y=\"-106.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 8 -->\n",
"<g id=\"node10\" class=\"node\"><title>8</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"399\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"389\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">2,1</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;8 -->\n",
"<g id=\"edge19\" class=\"edge\"><title>3&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M189.591,-144.821C192.716,-141.86 195.701,-138.537 198,-135 212.475,-112.723 203.062,-101.203 216,-78 232.575,-48.2748 235.168,-34.4115 266,-20 297.544,-5.25573 338.137,-7.30713 365.929,-11.4121\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"373.057,-12.5512 365.648,-14.5571 369.601,-11.9989 366.145,-11.4465 366.145,-11.4465 366.145,-11.4465 369.601,-11.9989 366.642,-8.33599 373.057,-12.5512 373.057,-12.5512\"/>\n",
"<text text-anchor=\"start\" x=\"287.5\" y=\"-23.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;5 -->\n",
"<g id=\"edge20\" class=\"edge\"><title>4&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M296.387,-180.936C300.473,-203.613 311.151,-241.771 338,-259 379.047,-285.34 438.36,-275.984 473.856,-266.614\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"480.626,-264.751 474.713,-269.646 477.251,-265.68 473.877,-266.609 473.877,-266.609 473.877,-266.609 477.251,-265.68 473.041,-263.572 480.626,-264.751 480.626,-264.751\"/>\n",
"<text text-anchor=\"start\" x=\"395.5\" y=\"-279.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;6 -->\n",
"<g id=\"edge21\" class=\"edge\"><title>4&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M319.975,-164.998C333.501,-166.039 350.192,-167.322 364.66,-168.435\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"371.995,-169 364.774,-171.603 368.506,-168.731 365.016,-168.463 365.016,-168.463 365.016,-168.463 368.506,-168.731 365.258,-165.322 371.995,-169 371.995,-169\"/>\n",
"<text text-anchor=\"start\" x=\"342.5\" y=\"-185.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"338\" y=\"-170.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;8 -->\n",
"<g id=\"edge22\" class=\"edge\"><title>4&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M305.527,-146.928C324.191,-120.907 361.058,-69.5063 382.168,-40.0737\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"386.421,-34.1435 384.901,-41.6677 384.381,-36.9876 382.341,-39.8317 382.341,-39.8317 382.341,-39.8317 384.381,-36.9876 379.782,-37.9958 386.421,-34.1435 386.421,-34.1435\"/>\n",
"<text text-anchor=\"start\" x=\"340.5\" y=\"-117.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"338\" y=\"-102.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">\u2777</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;5 -->\n",
"<g id=\"edge23\" class=\"edge\"><title>5&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M500.686,-274.782C499.953,-284.315 501.391,-293 505,-293 507.651,-293 509.13,-288.316 509.439,-282.052\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"509.314,-274.782 512.584,-281.727 509.374,-278.281 509.434,-281.781 509.434,-281.781 509.434,-281.781 509.374,-278.281 506.285,-281.835 509.314,-274.782 509.314,-274.782\"/>\n",
"<text text-anchor=\"start\" x=\"499.5\" y=\"-311.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"497\" y=\"-296.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">\u2776</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;5 -->\n",
"<g id=\"edge24\" class=\"edge\"><title>5&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M498.321,-274.577C493.727,-295.718 495.953,-323 505,-323 513.057,-323 515.705,-301.36 512.942,-281.691\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"511.679,-274.577 516.004,-280.919 512.291,-278.023 512.903,-281.469 512.903,-281.469 512.903,-281.469 512.291,-278.023 509.801,-282.02 511.679,-274.577 511.679,-274.577\"/>\n",
"<text text-anchor=\"start\" x=\"501.5\" y=\"-326.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;6 -->\n",
"<g id=\"edge25\" class=\"edge\"><title>5&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M496.747,-239.729C489.536,-224.556 477.084,-202.939 460,-190 451.94,-183.895 441.866,-179.721 432.289,-176.88\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"425.438,-175.038 433.016,-173.814 428.818,-175.947 432.198,-176.856 432.198,-176.856 432.198,-176.856 428.818,-175.947 431.38,-179.898 425.438,-175.038 425.438,-175.038\"/>\n",
"<text text-anchor=\"start\" x=\"448.5\" y=\"-208.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"444\" y=\"-193.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;5 -->\n",
"<g id=\"edge26\" class=\"edge\"><title>6&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M412.443,-187.087C420.737,-197.214 432.241,-210.179 444,-220 454.129,-228.46 466.371,-236.358 477.148,-242.666\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"483.298,-246.189 475.658,-245.442 480.261,-244.449 477.224,-242.709 477.224,-242.709 477.224,-242.709 480.261,-244.449 478.79,-239.976 483.298,-246.189 483.298,-246.189\"/>\n",
"<text text-anchor=\"start\" x=\"448.5\" y=\"-234.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;6 -->\n",
"<g id=\"edge27\" class=\"edge\"><title>6&#45;&gt;6</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M389.786,-188.037C387.905,-197.858 390.977,-207 399,-207 405.018,-207 408.25,-201.858 408.696,-195.143\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"408.214,-188.037 411.831,-194.808 408.451,-191.529 408.688,-195.021 408.688,-195.021 408.688,-195.021 408.451,-191.529 405.545,-195.234 408.214,-188.037 408.214,-188.037\"/>\n",
"<text text-anchor=\"start\" x=\"395.5\" y=\"-225.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"391\" y=\"-210.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"</g>\n",
"<!-- 9 -->\n",
"<g id=\"node11\" class=\"node\"><title>9</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"602\" cy=\"-124\" rx=\"27\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"592\" y=\"-120.3\" font-family=\"Lato\" font-size=\"14.00\">2,3</text>\n",
"</g>\n",
"<!-- 6&#45;&gt;9 -->\n",
"<g id=\"edge28\" class=\"edge\"><title>6&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M424.647,-165.237C460.963,-156.745 528.875,-140.865 568.997,-131.483\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"576.152,-129.81 570.053,-134.471 572.744,-130.607 569.336,-131.404 569.336,-131.404 569.336,-131.404 572.744,-130.607 568.618,-128.337 576.152,-129.81 576.152,-129.81\"/>\n",
"<text text-anchor=\"start\" x=\"499.5\" y=\"-155.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;7 -->\n",
"<g id=\"edge29\" class=\"edge\"><title>7&#45;&gt;7</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M283.786,-79.0373C281.905,-88.8579 284.977,-98 293,-98 299.018,-98 302.25,-92.8576 302.696,-86.1433\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"302.214,-79.0373 305.831,-85.8081 302.451,-82.5293 302.688,-86.0213 302.688,-86.0213 302.688,-86.0213 302.451,-82.5293 299.545,-86.2344 302.214,-79.0373 302.214,-79.0373\"/>\n",
"<text text-anchor=\"middle\" x=\"293\" y=\"-101.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;8 -->\n",
"<g id=\"edge30\" class=\"edge\"><title>7&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M313.776,-50.2396C321.224,-46.0719 329.862,-41.5423 338,-38 347.317,-33.9447 357.738,-30.2078 367.247,-27.0891\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"373.982,-24.9317 368.277,-30.0671 370.649,-25.9995 367.316,-27.0673 367.316,-27.0673 367.316,-27.0673 370.649,-25.9995 366.355,-24.0674 373.982,-24.9317 373.982,-24.9317\"/>\n",
"<text text-anchor=\"start\" x=\"340.5\" y=\"-41.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 10 -->\n",
"<g id=\"node12\" class=\"node\"><title>10</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"505\" cy=\"-84\" rx=\"27\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"495\" y=\"-80.3\" font-family=\"Lato\" font-size=\"14.00\">2,2</text>\n",
"</g>\n",
"<!-- 7&#45;&gt;10 -->\n",
"<g id=\"edge31\" class=\"edge\"><title>7&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M304.993,-78.234C312.857,-88.311 324.426,-100.378 338,-106 383.386,-124.799 441.182,-109.195 475.23,-96.4144\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"482.122,-93.7434 476.734,-99.2101 478.859,-95.0082 475.595,-96.273 475.595,-96.273 475.595,-96.273 478.859,-95.0082 474.457,-93.3358 482.122,-93.7434 482.122,-93.7434\"/>\n",
"<text text-anchor=\"start\" x=\"395.5\" y=\"-117.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;8 -->\n",
"<g id=\"edge32\" class=\"edge\"><title>8&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M389.786,-35.0373C387.905,-44.8579 390.977,-54 399,-54 405.018,-54 408.25,-48.8576 408.696,-42.1433\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"408.214,-35.0373 411.831,-41.8081 408.451,-38.5293 408.688,-42.0213 408.688,-42.0213 408.688,-42.0213 408.451,-38.5293 405.545,-42.2344 408.214,-35.0373 408.214,-35.0373\"/>\n",
"<text text-anchor=\"start\" x=\"393.5\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"391\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">\u2777</text>\n",
"</g>\n",
"<!-- 8&#45;&gt;10 -->\n",
"<g id=\"edge33\" class=\"edge\"><title>8&#45;&gt;10</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M416.647,-31.9286C424.68,-38.3691 434.596,-45.9201 444,-52 454.263,-58.6349 466.036,-65.1363 476.42,-70.5272\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"482.681,-73.7316 475.014,-73.3461 479.565,-72.1368 476.45,-70.5421 476.45,-70.5421 476.45,-70.5421 479.565,-72.1368 477.885,-67.738 482.681,-73.7316 482.681,-73.7316\"/>\n",
"<text text-anchor=\"start\" x=\"448.5\" y=\"-79.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"<text text-anchor=\"start\" x=\"444\" y=\"-64.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">\u2777</text>\n",
"</g>\n",
"<!-- 9&#45;&gt;9 -->\n",
"<g id=\"edge34\" class=\"edge\"><title>9&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M593.431,-141.41C591.831,-151.088 594.688,-160 602,-160 607.37,-160 610.337,-155.194 610.901,-148.807\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"610.569,-141.41 614.03,-148.262 610.726,-144.906 610.883,-148.403 610.883,-148.403 610.883,-148.403 610.726,-144.906 607.736,-148.544 610.569,-141.41 610.569,-141.41\"/>\n",
"<text text-anchor=\"middle\" x=\"602\" y=\"-163.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;8 -->\n",
"<g id=\"edge35\" class=\"edge\"><title>10&#45;&gt;8</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M497.901,-66.6001C491.293,-50.7141 479.062,-28.2019 460,-18 451.584,-13.4957 441.504,-12.2162 432.031,-12.43\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"424.943,-12.8558 431.741,-9.29161 428.436,-12.6459 431.93,-12.4359 431.93,-12.4359 431.93,-12.4359 428.436,-12.6459 432.119,-15.5803 424.943,-12.8558 424.943,-12.8558\"/>\n",
"<text text-anchor=\"start\" x=\"446.5\" y=\"-36.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"<text text-anchor=\"start\" x=\"444\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">\u2777</text>\n",
"</g>\n",
"<!-- 10&#45;&gt;9 -->\n",
"<g id=\"edge36\" class=\"edge\"><title>10&#45;&gt;9</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M528.514,-93.4794C541.528,-98.9591 558.04,-105.912 572.017,-111.797\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"578.648,-114.589 570.974,-114.775 575.422,-113.23 572.196,-111.872 572.196,-111.872 572.196,-111.872 575.422,-113.23 573.419,-108.969 578.648,-114.589 578.648,-114.589\"/>\n",
"<text text-anchor=\"start\" x=\"550\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f0b7c1b5810> >"
]
}
],
"prompt_number": 8
},
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"Global vs Local stuttering"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"h = spot.formula('F(a & X(!a & X(b & Xb)))')\n",
"aut = spot.translate(h)\n",
"spot.highlight_stutter_invariant_states(aut, h, 5)\n",
"display(aut)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"svg": [
"<?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.38.0 (20140413.2041)\n",
" -->\n",
"<!-- Title: G Pages: 1 -->\n",
"<svg width=\"406pt\" height=\"128pt\"\n",
" viewBox=\"0.00 0.00 406.00 128.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 124)\">\n",
"<title>G</title>\n",
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-124 402,-124 402,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"178\" y=\"-105.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"200\" y=\"-105.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"<text text-anchor=\"start\" x=\"216\" y=\"-105.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"176\" y=\"-91.8\" font-family=\"Lato\" font-size=\"14.00\">[B\u00fcchi]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\"><title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\"><title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15491,-18C2.79388,-18 17.1543,-18 30.6317,-18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.9419,-18 30.9419,-21.1501 34.4419,-18 30.9419,-18.0001 30.9419,-18.0001 30.9419,-18.0001 34.4419,-18 30.9418,-14.8501 37.9419,-18 37.9419,-18\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\"><title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.6208,-35.0373C48.3189,-44.8579 50.4453,-54 56,-54 60.166,-54 62.4036,-48.8576 62.7128,-42.1433\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"62.3792,-35.0373 65.8541,-41.8818 62.5434,-38.5335 62.7076,-42.0296 62.7076,-42.0296 62.7076,-42.0296 62.5434,-38.5335 59.561,-42.1774 62.3792,-35.0373 62.3792,-35.0373\"/>\n",
"<text text-anchor=\"start\" x=\"51.5\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\"><title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"135\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"130.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge3\" class=\"edge\"><title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.0888,-18C84.5562,-18 98.1196,-18 109.693,-18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"116.959,-18 109.959,-21.1501 113.459,-18 109.959,-18.0001 109.959,-18.0001 109.959,-18.0001 113.459,-18 109.959,-14.8501 116.959,-18 116.959,-18\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\"><title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"218\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"218\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;2 -->\n",
"<g id=\"edge4\" class=\"edge\"><title>1&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M153.178,-18C164.669,-18 179.959,-18 192.693,-18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"199.847,-18 192.847,-21.1501 196.347,-18 192.847,-18.0001 192.847,-18.0001 192.847,-18.0001 196.347,-18 192.847,-14.8501 199.847,-18 199.847,-18\"/>\n",
"<text text-anchor=\"start\" x=\"171\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\"><title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"299\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"299\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;3 -->\n",
"<g id=\"edge5\" class=\"edge\"><title>2&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M236.142,-18C247.115,-18 261.521,-18 273.67,-18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"280.892,-18 273.892,-21.1501 277.392,-18 273.892,-18.0001 273.892,-18.0001 273.892,-18.0001 277.392,-18 273.892,-14.8501 280.892,-18 280.892,-18\"/>\n",
"<text text-anchor=\"start\" x=\"254\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\"><title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"380\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"380\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge6\" class=\"edge\"><title>3&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M317.142,-18C328.115,-18 342.521,-18 354.67,-18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"361.892,-18 354.892,-21.1501 358.392,-18 354.892,-18.0001 354.892,-18.0001 354.892,-18.0001 358.392,-18 354.892,-14.8501 361.892,-18 361.892,-18\"/>\n",
"<text text-anchor=\"start\" x=\"335\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;4 -->\n",
"<g id=\"edge7\" class=\"edge\"><title>4&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M372.969,-34.6641C371.406,-44.625 373.75,-54 380,-54 384.688,-54 387.178,-48.7266 387.471,-41.8876\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"387.031,-34.6641 390.601,-41.4598 387.244,-38.1576 387.456,-41.6511 387.456,-41.6511 387.456,-41.6511 387.244,-38.1576 384.312,-41.8425 387.031,-34.6641 387.031,-34.6641\"/>\n",
"<text text-anchor=\"start\" x=\"375.5\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"372\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f0b7c1ce8a0> >"
]
}
],
"prompt_number": 9
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The above result uses a natural definition of \"stutter-invariant state\": a state is stutter-invariant if the language accepted from this state is.\n",
"\n",
"We can also have a \"local\" variant of the stutter invariance check that considers the state as stutter invariant if you can stutter on (or remove duplicates of) the first letter read from that state, but not necessary do the same operations on a different letter that follows. Just pass `True` as the last optional parameter, as below."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"spot.highlight_stutter_invariant_states(aut, h, 5, True)\n",
"display(aut)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"svg": [
"<?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.38.0 (20140413.2041)\n",
" -->\n",
"<!-- Title: G Pages: 1 -->\n",
"<svg width=\"406pt\" height=\"128pt\"\n",
" viewBox=\"0.00 0.00 406.00 128.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 124)\">\n",
"<title>G</title>\n",
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-124 402,-124 402,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"178\" y=\"-105.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"200\" y=\"-105.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"<text text-anchor=\"start\" x=\"216\" y=\"-105.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"176\" y=\"-91.8\" font-family=\"Lato\" font-size=\"14.00\">[B\u00fcchi]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\"><title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"56\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\"><title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15491,-18C2.79388,-18 17.1543,-18 30.6317,-18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.9419,-18 30.9419,-21.1501 34.4419,-18 30.9419,-18.0001 30.9419,-18.0001 30.9419,-18.0001 34.4419,-18 30.9418,-14.8501 37.9419,-18 37.9419,-18\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\"><title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.6208,-35.0373C48.3189,-44.8579 50.4453,-54 56,-54 60.166,-54 62.4036,-48.8576 62.7128,-42.1433\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"62.3792,-35.0373 65.8541,-41.8818 62.5434,-38.5335 62.7076,-42.0296 62.7076,-42.0296 62.7076,-42.0296 62.5434,-38.5335 59.561,-42.1774 62.3792,-35.0373 62.3792,-35.0373\"/>\n",
"<text text-anchor=\"start\" x=\"51.5\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\"><title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"135\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"start\" x=\"130.5\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge3\" class=\"edge\"><title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.0888,-18C84.5562,-18 98.1196,-18 109.693,-18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"116.959,-18 109.959,-21.1501 113.459,-18 109.959,-18.0001 109.959,-18.0001 109.959,-18.0001 113.459,-18 109.959,-14.8501 116.959,-18 116.959,-18\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\"><title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"218\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"218\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;2 -->\n",
"<g id=\"edge4\" class=\"edge\"><title>1&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M153.178,-18C164.669,-18 179.959,-18 192.693,-18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"199.847,-18 192.847,-21.1501 196.347,-18 192.847,-18.0001 192.847,-18.0001 192.847,-18.0001 196.347,-18 192.847,-14.8501 199.847,-18 199.847,-18\"/>\n",
"<text text-anchor=\"start\" x=\"171\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\"><title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"299\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"299\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;3 -->\n",
"<g id=\"edge5\" class=\"edge\"><title>2&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M236.142,-18C247.115,-18 261.521,-18 273.67,-18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"280.892,-18 273.892,-21.1501 277.392,-18 273.892,-18.0001 273.892,-18.0001 273.892,-18.0001 277.392,-18 273.892,-14.8501 280.892,-18 280.892,-18\"/>\n",
"<text text-anchor=\"start\" x=\"254\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\"><title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"380\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"380\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge6\" class=\"edge\"><title>3&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M317.142,-18C328.115,-18 342.521,-18 354.67,-18\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"361.892,-18 354.892,-21.1501 358.392,-18 354.892,-18.0001 354.892,-18.0001 354.892,-18.0001 358.392,-18 354.892,-14.8501 361.892,-18 361.892,-18\"/>\n",
"<text text-anchor=\"start\" x=\"335\" y=\"-21.8\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;4 -->\n",
"<g id=\"edge7\" class=\"edge\"><title>4&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M372.969,-34.6641C371.406,-44.625 373.75,-54 380,-54 384.688,-54 387.178,-48.7266 387.471,-41.8876\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"387.031,-34.6641 390.601,-41.4598 387.244,-38.1576 387.456,-41.6511 387.456,-41.6511 387.456,-41.6511 387.244,-38.1576 384.312,-41.8425 387.031,-34.6641 387.031,-34.6641\"/>\n",
"<text text-anchor=\"start\" x=\"375.5\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"372\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f0b7c1ce8a0> >"
]
}
],
"prompt_number": 10
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that an SCC can contain a mix of locally stutter-invariant and local stutter-sensitive states. So probably POR should be applied between two locally stutter-invariant states? Here is the deterministic version of the above automaton for example."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"aut = spot.translate(h, 'deterministic')\n",
"spot.highlight_stutter_invariant_states(aut, h, 5, True)\n",
"display(aut.show('.abs'))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"svg": [
"<svg height=\"234pt\" viewBox=\"0.00 0.00 507.74 234.00\" width=\"508pt\" 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 230)\">\n",
"<title>G</title>\n",
"<polygon fill=\"white\" points=\"-4,4 -4,-230 503.74,-230 503.74,4 -4,4\" stroke=\"none\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"228.87\" y=\"-211.8\">Inf(</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"250.87\" y=\"-211.8\">\u24ff</text>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"266.87\" y=\"-211.8\">)</text>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"226.87\" y=\"-197.8\">[B\u00fcchi]</text>\n",
"<g class=\"cluster\" id=\"clust1\"><title>cluster_0</title>\n",
"<polygon fill=\"none\" points=\"422,-64 422,-167 491.74,-167 491.74,-64 422,-64\" stroke=\"green\"/>\n",
"</g>\n",
"<g class=\"cluster\" id=\"clust2\"><title>cluster_1</title>\n",
"<polygon fill=\"none\" points=\"30,-8 30,-182 393,-182 393,-8 30,-8\" stroke=\"red\"/>\n",
"</g>\n",
"<!-- I -->\n",
"<!-- 3 -->\n",
"<g class=\"node\" id=\"node2\"><title>3</title>\n",
"<ellipse cx=\"56\" cy=\"-87\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"#e31a1c\" stroke-width=\"2\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"56\" y=\"-83.3\">3</text>\n",
"</g>\n",
"<!-- I&#45;&gt;3 -->\n",
"<g class=\"edge\" id=\"edge1\"><title>I-&gt;3</title>\n",
"<path d=\"M1.15491,-87C2.79388,-87 17.1543,-87 30.6317,-87\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"37.9419,-87 30.9419,-90.1501 34.4419,-87 30.9419,-87.0001 30.9419,-87.0001 30.9419,-87.0001 34.4419,-87 30.9418,-83.8501 37.9419,-87 37.9419,-87\" stroke=\"black\"/>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g class=\"edge\" id=\"edge12\"><title>3-&gt;3</title>\n",
"<path d=\"M49.6208,-104.037C48.3189,-113.858 50.4453,-123 56,-123 60.166,-123 62.4036,-117.858 62.7128,-111.143\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"62.3792,-104.037 65.8541,-110.882 62.5434,-107.533 62.7076,-111.03 62.7076,-111.03 62.7076,-111.03 62.5434,-107.533 59.561,-111.177 62.3792,-104.037 62.3792,-104.037\" stroke=\"black\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"50.5\" y=\"-126.8\">!a</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g class=\"node\" id=\"node4\"><title>4</title>\n",
"<ellipse cx=\"137.5\" cy=\"-87\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"black\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"137.5\" y=\"-83.3\">4</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g class=\"edge\" id=\"edge13\"><title>3-&gt;4</title>\n",
"<path d=\"M74.2503,-87C85.2932,-87 99.7905,-87 112.016,-87\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"119.283,-87 112.283,-90.1501 115.783,-87 112.283,-87.0001 112.283,-87.0001 112.283,-87.0001 115.783,-87 112.283,-83.8501 119.283,-87 119.283,-87\" stroke=\"black\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"92\" y=\"-90.8\">a</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g class=\"node\" id=\"node3\"><title>5</title>\n",
"<ellipse cx=\"456.87\" cy=\"-99\" fill=\"#ffffaa\" rx=\"26.7407\" ry=\"26.7407\" stroke=\"#e31a1c\" stroke-width=\"2\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"452.37\" y=\"-102.8\">5</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"448.87\" y=\"-87.8\">\u24ff</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;5 -->\n",
"<g class=\"edge\" id=\"edge16\"><title>5-&gt;5</title>\n",
"<path d=\"M447.949,-124.37C447.334,-134.924 450.308,-143.87 456.87,-143.87 461.894,-143.87 464.815,-138.626 465.632,-131.431\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"465.791,-124.37 468.783,-131.439 465.712,-127.869 465.633,-131.368 465.633,-131.368 465.633,-131.368 465.712,-127.869 462.484,-131.297 465.791,-124.37 465.791,-124.37\" stroke=\"black\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"456.87\" y=\"-147.67\">1</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;4 -->\n",
"<g class=\"edge\" id=\"edge15\"><title>4-&gt;4</title>\n",
"<path d=\"M130.117,-103.664C128.477,-113.625 130.938,-123 137.5,-123 142.422,-123 145.037,-117.727 145.344,-110.888\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"144.883,-103.664 148.473,-110.449 145.106,-107.157 145.329,-110.65 145.329,-110.65 145.329,-110.65 145.106,-107.157 142.186,-110.851 144.883,-103.664 144.883,-103.664\" stroke=\"black\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"134\" y=\"-126.8\">a</text>\n",
"</g>\n",
"<!-- 0 -->\n",
"<g class=\"node\" id=\"node5\"><title>0</title>\n",
"<ellipse cx=\"253.5\" cy=\"-85\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"black\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"253.5\" y=\"-81.3\">0</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;0 -->\n",
"<g class=\"edge\" id=\"edge14\"><title>4-&gt;0</title>\n",
"<path d=\"M155.655,-87.2775C171.561,-87.469 195.884,-87.5943 217,-87 220.685,-86.8963 224.583,-86.7321 228.393,-86.5414\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"235.534,-86.1506 228.717,-89.6784 232.04,-86.3419 228.545,-86.5331 228.545,-86.5331 228.545,-86.5331 232.04,-86.3419 228.373,-83.3878 235.534,-86.1506 235.534,-86.1506\" stroke=\"black\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"191\" y=\"-91.8\">!a</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g class=\"edge\" id=\"edge4\"><title>0-&gt;3</title>\n",
"<path d=\"M238.207,-75.0981C213.44,-59.2074 160.979,-31.1368 117,-45 101.303,-49.948 86.1407,-60.6296 74.985,-69.9818\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"69.5349,-74.7139 72.7554,-67.746 72.1778,-72.4192 74.8206,-70.1246 74.8206,-70.1246 74.8206,-70.1246 72.1778,-72.4192 76.8858,-72.5031 69.5349,-74.7139 69.5349,-74.7139\" stroke=\"black\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"117\" y=\"-48.8\">!a &amp; !b</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;4 -->\n",
"<g class=\"edge\" id=\"edge5\"><title>0-&gt;4</title>\n",
"<path d=\"M236.925,-77.9539C230.84,-75.5609 223.721,-73.1919 217,-72 199.058,-68.8181 193.893,-68.554 176,-72 170.888,-72.9846 165.586,-74.6598 160.635,-76.5423\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"154.153,-79.1924 159.44,-73.6279 157.392,-77.868 160.632,-76.5437 160.632,-76.5437 160.632,-76.5437 157.392,-77.868 161.824,-79.4595 154.153,-79.1924 154.153,-79.1924\" stroke=\"black\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"178\" y=\"-75.8\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g class=\"node\" id=\"node6\"><title>1</title>\n",
"<ellipse cx=\"367\" cy=\"-138\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"#e31a1c\" stroke-width=\"2\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"367\" y=\"-134.3\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g class=\"edge\" id=\"edge2\"><title>0-&gt;1</title>\n",
"<path d=\"M270.004,-92.3694C289.2,-101.494 322.03,-117.099 343.87,-127.481\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"350.269,-130.522 342.594,-130.362 347.108,-129.02 343.946,-127.517 343.946,-127.517 343.946,-127.517 347.108,-129.02 345.299,-124.672 350.269,-130.522 350.269,-130.522\" stroke=\"black\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"292\" y=\"-124.8\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g class=\"node\" id=\"node7\"><title>2</title>\n",
"<ellipse cx=\"367\" cy=\"-59\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"black\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"367\" y=\"-55.3\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g class=\"edge\" id=\"edge3\"><title>0-&gt;2</title>\n",
"<path d=\"M265.421,-71.1933C271.766,-64.313 280.395,-56.6899 290,-53 306.776,-46.555 327.136,-48.6347 342.56,-52.0093\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"349.697,-53.7383 342.152,-55.1516 346.295,-52.9142 342.894,-52.0902 342.894,-52.0902 342.894,-52.0902 346.295,-52.9142 343.635,-49.0287 349.697,-53.7383 349.697,-53.7383\" stroke=\"black\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"293.5\" y=\"-56.8\">a &amp; b</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;3 -->\n",
"<g class=\"edge\" id=\"edge6\"><title>1-&gt;3</title>\n",
"<path d=\"M349.563,-143.472C308.171,-156.255 197.224,-184.276 117,-147 98.1796,-138.255 81.9033,-120.965 71.0704,-107.183\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"66.7694,-101.527 73.5137,-105.192 68.8878,-104.313 71.0062,-107.099 71.0062,-107.099 71.0062,-107.099 68.8878,-104.313 68.4987,-109.005 66.7694,-101.527 66.7694,-101.527\" stroke=\"black\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"176\" y=\"-168.8\">!a &amp; !b</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;5 -->\n",
"<g class=\"edge\" id=\"edge8\"><title>1-&gt;5</title>\n",
"<path d=\"M383.709,-131.028C395.248,-125.906 411.292,-118.786 425.322,-112.559\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"432.019,-109.586 426.899,-115.305 428.82,-111.006 425.621,-112.426 425.621,-112.426 425.621,-112.426 428.82,-111.006 424.343,-109.547 432.019,-109.586 432.019,-109.586\" stroke=\"black\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"403\" y=\"-125.8\">b</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;4 -->\n",
"<g class=\"edge\" id=\"edge7\"><title>1-&gt;4</title>\n",
"<path d=\"M349.004,-140.059C333.54,-141.551 310.125,-142.854 290,-140 237.776,-132.593 224.868,-126.852 176,-107 170.617,-104.813 164.997,-102.079 159.795,-99.3416\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"153.48,-95.913 161.135,-96.4845 156.556,-97.5829 159.632,-99.2528 159.632,-99.2528 159.632,-99.2528 156.556,-97.5829 158.129,-102.021 153.48,-95.913 153.48,-95.913\" stroke=\"black\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"235\" y=\"-141.8\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;5 -->\n",
"<g class=\"edge\" id=\"edge11\"><title>2-&gt;5</title>\n",
"<path d=\"M383.709,-66.1512C395.248,-71.4039 411.292,-78.7072 425.322,-85.0938\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"432.019,-88.1425 424.343,-88.1092 428.833,-86.6923 425.648,-85.2422 425.648,-85.2422 425.648,-85.2422 428.833,-86.6923 426.953,-82.3753 432.019,-88.1425 432.019,-88.1425\" stroke=\"black\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"403\" y=\"-82.8\">b</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;4 -->\n",
"<g class=\"edge\" id=\"edge10\"><title>2-&gt;4</title>\n",
"<path d=\"M350.333,-51.3873C344.416,-48.8747 337.533,-46.3732 331,-45 327.069,-44.1736 248.501,-40.4615 235,-43 207.441,-48.1818 178.519,-62.7706 159.61,-73.7398\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"153.117,-77.5932 157.529,-71.3116 156.127,-75.8068 159.137,-74.0204 159.137,-74.0204 159.137,-74.0204 156.127,-75.8068 160.744,-76.7293 153.117,-77.5932 153.117,-77.5932\" stroke=\"black\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"235\" y=\"-46.8\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;0 -->\n",
"<g class=\"edge\" id=\"edge9\"><title>2-&gt;0</title>\n",
"<path d=\"M349.293,-63.4158C343.51,-64.9126 336.979,-66.5673 331,-68 313.376,-72.2229 293.381,-76.6538 278.254,-79.9329\" fill=\"none\" stroke=\"black\"/>\n",
"<polygon fill=\"black\" points=\"271.251,-81.4442 277.429,-76.8884 274.672,-80.7059 278.093,-79.9675 278.093,-79.9675 278.093,-79.9675 274.672,-80.7059 278.758,-83.0467 271.251,-81.4442 271.251,-81.4442\" stroke=\"black\"/>\n",
"<text font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"290\" y=\"-81.8\">!a &amp; !b</text>\n",
"</g>\n",
"</g>\n",
"</svg>"
],
"text": [
"<IPython.core.display.SVG object>"
]
}
],
"prompt_number": 11
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Support for more complex acceptance conditions\n",
"\n",
"This also works, although it's not clear how useful that is."
]
},
{
"cell_type": "code",
"collapsed": true,
"input": [
"m = spot.formula('F(a & Xa & Gb) | GF!b')\n",
"aut = spot.translate(m, 'deterministic', 'generic')"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 12
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"spot.highlight_stutter_invariant_states(aut, m, 5, True)\n",
"display(aut)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"svg": [
"<?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.38.0 (20140413.2041)\n",
" -->\n",
"<!-- Title: G Pages: 1 -->\n",
"<svg width=\"597pt\" height=\"263pt\"\n",
" viewBox=\"0.00 0.00 597.00 263.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 259)\">\n",
"<title>G</title>\n",
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-259 593,-259 593,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"177.5\" y=\"-240.8\" font-family=\"Lato\" font-size=\"14.00\">Fin(</text>\n",
"<text text-anchor=\"start\" x=\"202.5\" y=\"-240.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"<text text-anchor=\"start\" x=\"218.5\" y=\"-240.8\" font-family=\"Lato\" font-size=\"14.00\">) &amp; (Inf(</text>\n",
"<text text-anchor=\"start\" x=\"265.5\" y=\"-240.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">\u2776</text>\n",
"<text text-anchor=\"start\" x=\"281.5\" y=\"-240.8\" font-family=\"Lato\" font-size=\"14.00\">) | (Fin(</text>\n",
"<text text-anchor=\"start\" x=\"324.5\" y=\"-240.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">\u2777</text>\n",
"<text text-anchor=\"start\" x=\"340.5\" y=\"-240.8\" font-family=\"Lato\" font-size=\"14.00\">) &amp; Inf(</text>\n",
"<text text-anchor=\"start\" x=\"383.5\" y=\"-240.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">\u2778</text>\n",
"<text text-anchor=\"start\" x=\"399.5\" y=\"-240.8\" font-family=\"Lato\" font-size=\"14.00\">)))</text>\n",
"<text text-anchor=\"start\" x=\"237.5\" y=\"-226.8\" font-family=\"Lato\" font-size=\"14.00\">[parity min odd 4]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\"><title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-133\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-129.3\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\"><title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15491,-133C2.79388,-133 17.1543,-133 30.6317,-133\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.9419,-133 30.9419,-136.15 34.4419,-133 30.9419,-133 30.9419,-133 30.9419,-133 34.4419,-133 30.9418,-129.85 37.9419,-133 37.9419,-133\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\"><title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M49.6208,-150.037C48.3189,-159.858 50.4453,-169 56,-169 60.166,-169 62.4036,-163.858 62.7128,-157.143\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"62.3792,-150.037 65.8541,-156.882 62.5434,-153.533 62.7076,-157.03 62.7076,-157.03 62.7076,-157.03 62.5434,-153.533 59.561,-157.177 62.3792,-150.037 62.3792,-150.037\"/>\n",
"<text text-anchor=\"start\" x=\"37.5\" y=\"-172.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\"><title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"356\" cy=\"-120\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"356\" y=\"-116.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge3\" class=\"edge\"><title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.5689,-138.171C79.3413,-139.728 85.9,-141.228 92,-142 108.314,-144.064 112.561,-142.411 129,-142 200.178,-140.222 218.083,-140.338 289,-134 302.837,-132.763 306.394,-132.805 320,-130 323.868,-129.202 327.934,-128.198 331.87,-127.136\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"338.744,-125.193 332.865,-130.128 335.376,-126.145 332.008,-127.097 332.008,-127.097 332.008,-127.097 335.376,-126.145 331.152,-124.066 338.744,-125.193 338.744,-125.193\"/>\n",
"<text text-anchor=\"start\" x=\"211.5\" y=\"-143.8\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\"><title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"165\" cy=\"-106\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"165\" y=\"-102.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge4\" class=\"edge\"><title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.7188,-128.781C91.6218,-124.264 120.176,-117.058 140.371,-111.962\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"147.399,-110.189 141.382,-114.956 144.005,-111.045 140.611,-111.902 140.611,-111.902 140.611,-111.902 144.005,-111.045 139.841,-108.848 147.399,-110.189 147.399,-110.189\"/>\n",
"<text text-anchor=\"start\" x=\"93.5\" y=\"-126.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge5\" class=\"edge\"><title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M352.225,-137.782C351.583,-147.315 352.842,-156 356,-156 358.319,-156 359.614,-151.316 359.884,-145.052\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"359.775,-137.782 363.03,-144.734 359.828,-141.281 359.88,-144.781 359.88,-144.781 359.88,-144.781 359.828,-141.281 356.73,-144.828 359.775,-137.782 359.775,-137.782\"/>\n",
"<text text-anchor=\"start\" x=\"337.5\" y=\"-159.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\"><title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M349.855,-137.142C346.241,-154.585 348.289,-174 356,-174 362.687,-174 365.115,-159.4 363.285,-144.146\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"362.145,-137.142 366.379,-143.544 362.707,-140.596 363.27,-144.051 363.27,-144.051 363.27,-144.051 362.707,-140.596 360.161,-144.557 362.145,-137.142 362.145,-137.142\"/>\n",
"<text text-anchor=\"start\" x=\"349.5\" y=\"-192.8\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"348\" y=\"-177.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">\u2776</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\"><title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"465\" cy=\"-137\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"465\" y=\"-133.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;3 -->\n",
"<g id=\"edge7\" class=\"edge\"><title>1&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M365.068,-135.782C371.038,-145.595 380.177,-157.379 392,-163 406.851,-170.061 413.388,-168.164 429,-163 434.992,-161.018 440.793,-157.569 445.893,-153.819\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"451.526,-149.349 448.001,-156.168 448.784,-151.524 446.043,-153.7 446.043,-153.7 446.043,-153.7 448.784,-151.524 444.085,-151.233 451.526,-149.349 451.526,-149.349\"/>\n",
"<text text-anchor=\"start\" x=\"393.5\" y=\"-170.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;0 -->\n",
"<g id=\"edge8\" class=\"edge\"><title>2&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M148.19,-99.1546C133.155,-93.7007 110.198,-88.1643 92,-96 83.7517,-99.5515 76.5393,-106.109 70.8391,-112.728\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"66.417,-118.237 68.3419,-110.806 68.6078,-115.508 70.7985,-112.778 70.7985,-112.778 70.7985,-112.778 68.6078,-115.508 73.2552,-114.75 66.417,-118.237 66.417,-118.237\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-99.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge9\" class=\"edge\"><title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M183.106,-107.267C216.755,-109.76 291.65,-115.307 330.525,-118.187\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"337.797,-118.726 330.583,-121.35 334.306,-118.467 330.816,-118.208 330.816,-118.208 330.816,-118.208 334.306,-118.467 331.049,-115.067 337.797,-118.726 337.797,-118.726\"/>\n",
"<text text-anchor=\"start\" x=\"264.5\" y=\"-118.8\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\"><title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"271\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"271\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;4 -->\n",
"<g id=\"edge10\" class=\"edge\"><title>2&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M179.172,-94.8547C197.357,-79.4668 230.264,-51.623 251.079,-34.0103\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"256.607,-29.3327 253.298,-36.259 253.935,-31.5935 251.263,-33.8544 251.263,-33.8544 251.263,-33.8544 253.935,-31.5935 249.228,-31.4497 256.607,-29.3327 256.607,-29.3327\"/>\n",
"<text text-anchor=\"start\" x=\"201\" y=\"-79.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;1 -->\n",
"<g id=\"edge11\" class=\"edge\"><title>3&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M446.851,-134.275C429.084,-131.453 401.168,-127.017 381.168,-123.84\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"374.191,-122.731 381.599,-120.719 377.648,-123.281 381.105,-123.83 381.105,-123.83 381.105,-123.83 377.648,-123.281 380.61,-126.941 374.191,-122.731 374.191,-122.731\"/>\n",
"<text text-anchor=\"start\" x=\"392\" y=\"-134.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;1 -->\n",
"<g id=\"edge12\" class=\"edge\"><title>3&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M456.455,-120.61C450.609,-110.037 441.408,-97.1502 429,-91 414.266,-83.6968 407.47,-85.4237 392,-91 385.458,-93.3581 379.272,-97.5293 373.973,-101.986\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"368.596,-106.861 371.666,-99.8257 371.189,-104.51 373.782,-102.159 373.782,-102.159 373.782,-102.159 371.189,-104.51 375.898,-104.493 368.596,-106.861 368.596,-106.861\"/>\n",
"<text text-anchor=\"start\" x=\"404\" y=\"-109.8\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"402.5\" y=\"-94.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">\u2776</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node7\" class=\"node\"><title>5</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"571\" cy=\"-88\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"571\" y=\"-84.3\" font-family=\"Lato\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;5 -->\n",
"<g id=\"edge13\" class=\"edge\"><title>3&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M481.795,-129.558C499.46,-121.235 528.189,-107.699 548.035,-98.3487\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"554.397,-95.3515 549.407,-101.185 551.231,-96.8433 548.064,-98.3351 548.064,-98.3351 548.064,-98.3351 551.231,-96.8433 546.722,-95.4855 554.397,-95.3515 554.397,-95.3515\"/>\n",
"<text text-anchor=\"start\" x=\"501\" y=\"-122.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;1 -->\n",
"<g id=\"edge14\" class=\"edge\"><title>4&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M283.194,-31.7562C297.692,-49.5735 323.042,-80.7258 339.416,-100.849\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"343.984,-106.462 337.122,-103.02 341.775,-103.747 339.565,-101.032 339.565,-101.032 339.565,-101.032 341.775,-103.747 342.009,-99.044 343.984,-106.462 343.984,-106.462\"/>\n",
"<text text-anchor=\"start\" x=\"307\" y=\"-79.8\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;4 -->\n",
"<g id=\"edge15\" class=\"edge\"><title>4&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M263.617,-34.6641C261.977,-44.625 264.438,-54 271,-54 275.922,-54 278.537,-48.7266 278.844,-41.8876\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"278.383,-34.6641 281.973,-41.449 278.606,-38.1569 278.829,-41.6498 278.829,-41.6498 278.829,-41.6498 278.606,-38.1569 275.686,-41.8507 278.383,-34.6641 278.383,-34.6641\"/>\n",
"<text text-anchor=\"start\" x=\"266.5\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"<text text-anchor=\"start\" x=\"263\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">\u2776</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;1 -->\n",
"<g id=\"edge16\" class=\"edge\"><title>5&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M553.564,-82.8968C520.963,-73.7422 446.559,-57.7246 392,-83 384.137,-86.6425 377.165,-92.9184 371.555,-99.2777\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"366.798,-105.068 368.807,-97.6597 369.019,-102.364 371.241,-99.6592 371.241,-99.6592 371.241,-99.6592 369.019,-102.364 373.675,-101.659 366.798,-105.068 366.798,-105.068\"/>\n",
"<text text-anchor=\"start\" x=\"458.5\" y=\"-89.8\" font-family=\"Lato\" font-size=\"14.00\">!b</text>\n",
"<text text-anchor=\"start\" x=\"457\" y=\"-74.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">\u2776</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;5 -->\n",
"<g id=\"edge17\" class=\"edge\"><title>5&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M562.021,-103.916C559.679,-114.15 562.672,-124 571,-124 577.376,-124 580.625,-118.226 580.746,-110.927\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"579.979,-103.916 583.872,-110.532 580.36,-107.395 580.741,-110.874 580.741,-110.874 580.741,-110.874 580.36,-107.395 577.61,-111.217 579.979,-103.916 579.979,-103.916\"/>\n",
"<text text-anchor=\"start\" x=\"566.5\" y=\"-142.8\" font-family=\"Lato\" font-size=\"14.00\">b</text>\n",
"<text text-anchor=\"start\" x=\"563\" y=\"-127.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">\u2778</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f0b7c15f600> >"
]
}
],
"prompt_number": 13
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Checking an automaton without formula\n",
"\n",
"The check can also be applied on an automaton for which the formula is unknown, but in the case the input automaton will be complemented via determinization, so this is costlier."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"aut = spot.automaton('genaut --ks-nca=2 |')\n",
"spot.highlight_stutter_invariant_states(aut, None, 5, True)\n",
"display(aut)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"svg": [
"<?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.38.0 (20140413.2041)\n",
" -->\n",
"<!-- Title: G Pages: 1 -->\n",
"<svg width=\"602pt\" height=\"253pt\"\n",
" viewBox=\"0.00 0.00 601.74 253.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 249)\">\n",
"<title>G</title>\n",
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-249 597.74,-249 597.74,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"274.37\" y=\"-230.8\" font-family=\"Lato\" font-size=\"14.00\">Fin(</text>\n",
"<text text-anchor=\"start\" x=\"299.37\" y=\"-230.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"<text text-anchor=\"start\" x=\"315.37\" y=\"-230.8\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
"<text text-anchor=\"start\" x=\"264.37\" y=\"-216.8\" font-family=\"Lato\" font-size=\"14.00\">[co&#45;B\u00fcchi]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\"><title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"64.8701\" cy=\"-105\" rx=\"26.7407\" ry=\"26.7407\"/>\n",
"<text text-anchor=\"start\" x=\"60.3701\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
"<text text-anchor=\"start\" x=\"56.8701\" y=\"-93.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">\u24ff</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\"><title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.04557,-105C1.94668,-105 16.0699,-105 30.6965,-105\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.8616,-105 30.8617,-108.15 34.3616,-105 30.8616,-105 30.8616,-105 30.8616,-105 34.3616,-105 30.8616,-101.85 37.8616,-105 37.8616,-105\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\"><title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"186.74\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"186.74\" y=\"-14.3\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\"><title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M87.0245,-89.6464C109.264,-73.5052 143.988,-48.3029 165.771,-32.493\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"171.551,-28.2982 167.736,-34.9592 168.719,-30.354 165.886,-32.4099 165.886,-32.4099 165.886,-32.4099 168.719,-30.354 164.036,-29.8606 171.551,-28.2982 171.551,-28.2982\"/>\n",
"<text text-anchor=\"middle\" x=\"130.24\" y=\"-74.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\"><title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"357.74\" cy=\"-69\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"357.74\" y=\"-65.3\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge3\" class=\"edge\"><title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M91.9203,-106.884C138.901,-109.495 240.49,-111.526 321.74,-88 326.559,-86.6047 331.458,-84.4738 336.005,-82.1365\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"342.364,-78.6261 337.758,-84.7669 339.3,-80.3177 336.236,-82.0093 336.236,-82.0093 336.236,-82.0093 339.3,-80.3177 334.713,-79.2516 342.364,-78.6261 342.364,-78.6261\"/>\n",
"<text text-anchor=\"middle\" x=\"186.74\" y=\"-111.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\"><title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"466.74\" cy=\"-103\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"466.74\" y=\"-99.3\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge4\" class=\"edge\"><title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M89.6166,-115.618C96.0337,-118.094 103.055,-120.455 109.74,-122 135.381,-127.926 142.454,-125.734 168.74,-127 260.638,-131.425 284.644,-141.895 375.74,-129 399.197,-125.68 425.098,-117.72 443.068,-111.476\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"449.781,-109.095 444.237,-114.404 446.482,-110.265 443.183,-111.435 443.183,-111.435 443.183,-111.435 446.482,-110.265 442.13,-108.466 449.781,-109.095 449.781,-109.095\"/>\n",
"<text text-anchor=\"middle\" x=\"272.24\" y=\"-138.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\"><title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#e31a1c\" stroke-width=\"2\" cx=\"575.74\" cy=\"-103\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"575.74\" y=\"-99.3\" font-family=\"Lato\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;4 -->\n",
"<g id=\"edge5\" class=\"edge\"><title>0&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M81.0053,-126.544C101.471,-152.884 140.64,-194 185.74,-194 185.74,-194 185.74,-194 467.74,-194 510.409,-194 544.736,-151.489 562.192,-124.578\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"566.06,-118.437 564.994,-126.039 564.195,-121.398 562.329,-124.36 562.329,-124.36 562.329,-124.36 564.195,-121.398 559.664,-122.681 566.06,-118.437 566.06,-118.437\"/>\n",
"<text text-anchor=\"middle\" x=\"357.74\" y=\"-197.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g id=\"edge6\" class=\"edge\"><title>1&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M168.873,-14.9899C152.427,-12.9911 127.382,-12.527 109.74,-24 92.6966,-35.0838 81.762,-55.1336 75.072,-72.5116\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"72.6279,-79.2636 72.0486,-71.6093 73.8192,-75.9725 75.0106,-72.6815 75.0106,-72.6815 75.0106,-72.6815 73.8192,-75.9725 77.9725,-73.7537 72.6279,-79.2636 72.6279,-79.2636\"/>\n",
"<text text-anchor=\"start\" x=\"109.74\" y=\"-27.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !b</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge7\" class=\"edge\"><title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M177.166,-33.5414C174.47,-43.9087 177.662,-54 186.74,-54 193.691,-54 197.19,-48.0847 197.24,-40.6591\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"196.315,-33.5414 200.341,-40.0771 196.766,-37.0123 197.217,-40.4831 197.217,-40.4831 197.217,-40.4831 196.766,-37.0123 194.093,-40.889 196.315,-33.5414 196.315,-33.5414\"/>\n",
"<text text-anchor=\"start\" x=\"169.74\" y=\"-57.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;2 -->\n",
"<g id=\"edge8\" class=\"edge\"><title>1&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M199.002,-31.6019C205.281,-38.2463 213.655,-45.7148 222.74,-50 258.287,-66.7677 304.592,-69.7349 332.418,-69.7776\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"339.753,-69.7211 332.777,-72.925 336.253,-69.7481 332.753,-69.7751 332.753,-69.7751 332.753,-69.7751 336.253,-69.7481 332.729,-66.6252 339.753,-69.7211 339.753,-69.7211\"/>\n",
"<text text-anchor=\"start\" x=\"222.74\" y=\"-72.8\" font-family=\"Lato\" font-size=\"14.00\">(!a &amp; b) | (a &amp; !b)</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge9\" class=\"edge\"><title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M347.237,-54.2193C341.042,-45.9111 332.18,-36.193 321.74,-31 286.585,-13.5128 239.867,-13.3781 211.899,-15.3524\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"204.872,-15.9213 211.595,-12.2166 208.361,-15.6388 211.849,-15.3563 211.849,-15.3563 211.849,-15.3563 208.361,-15.6388 212.104,-18.4961 204.872,-15.9213 204.872,-15.9213\"/>\n",
"<text text-anchor=\"start\" x=\"253.74\" y=\"-34.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge10\" class=\"edge\"><title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M348.507,-84.5414C345.909,-94.9087 348.986,-105 357.74,-105 364.442,-105 367.817,-99.0847 367.865,-91.6591\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"366.973,-84.5414 370.969,-91.0955 367.408,-88.0143 367.843,-91.4871 367.843,-91.4871 367.843,-91.4871 367.408,-88.0143 364.718,-91.8788 366.973,-84.5414 366.973,-84.5414\"/>\n",
"<text text-anchor=\"start\" x=\"308.24\" y=\"-108.8\" font-family=\"Lato\" font-size=\"14.00\">(!a &amp; !b) | (a &amp; b)</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;3 -->\n",
"<g id=\"edge11\" class=\"edge\"><title>2&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M374.991,-74.1639C392.981,-79.8803 422.127,-89.1416 442.52,-95.6218\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"449.336,-97.7875 441.711,-98.6697 446.001,-96.7276 442.665,-95.6676 442.665,-95.6676 442.665,-95.6676 446.001,-96.7276 443.619,-92.6655 449.336,-97.7875 449.336,-97.7875\"/>\n",
"<text text-anchor=\"start\" x=\"393.74\" y=\"-94.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge12\" class=\"edge\"><title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M457.507,-118.541C454.909,-128.909 457.986,-139 466.74,-139 473.442,-139 476.817,-133.085 476.865,-125.659\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"475.973,-118.541 479.969,-125.095 476.408,-122.014 476.843,-125.487 476.843,-125.487 476.843,-125.487 476.408,-122.014 473.718,-125.879 475.973,-118.541 475.973,-118.541\"/>\n",
"<text text-anchor=\"start\" x=\"451.24\" y=\"-142.8\" font-family=\"Lato\" font-size=\"14.00\">!a | b</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge13\" class=\"edge\"><title>3&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M484.932,-103C502.637,-103 530.388,-103 550.356,-103\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"557.591,-103 550.591,-106.15 554.091,-103 550.591,-103 550.591,-103 550.591,-103 554.091,-103 550.591,-99.8501 557.591,-103 557.591,-103\"/>\n",
"<text text-anchor=\"start\" x=\"502.74\" y=\"-106.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;1 -->\n",
"<g id=\"edge14\" class=\"edge\"><title>4&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M559.244,-95.5387C520.4,-77.3013 415.284,-30.8042 321.74,-15 283.779,-8.58658 238.917,-11.7158 211.929,-14.732\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"204.811,-15.5717 211.394,-11.6232 208.287,-15.1616 211.763,-14.7515 211.763,-14.7515 211.763,-14.7515 208.287,-15.1616 212.132,-17.8798 204.811,-15.5717 204.811,-15.5717\"/>\n",
"<text text-anchor=\"start\" x=\"393.74\" y=\"-45.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;4 -->\n",
"<g id=\"edge15\" class=\"edge\"><title>4&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M566.507,-118.541C563.909,-128.909 566.986,-139 575.74,-139 582.442,-139 585.817,-133.085 585.865,-125.659\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"584.973,-118.541 588.969,-125.095 585.408,-122.014 585.843,-125.487 585.843,-125.487 585.843,-125.487 585.408,-122.014 582.718,-125.879 584.973,-118.541 584.973,-118.541\"/>\n",
"<text text-anchor=\"start\" x=\"560.24\" y=\"-142.8\" font-family=\"Lato\" font-size=\"14.00\">!a | b</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f0b7c13e660> >"
]
}
],
"prompt_number": 44
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If the negated automaton is already known, it can be passed as second argument (instead of the positive formula) to avoid unnecessary work."
]
}
],
"metadata": {}
}
]
}