spot/tests/python/_partitioned_relabel.ipynb
Philipp Schlehuber-Caissier fb63dfc309 introduce partitioned_relabel_here
Function taking an automaton and trying to relabel
it by partitioning the old conditions and encode the
different subsets of the partition with new variables

* spot/priv/Makefile.am: Add
* spot/priv/partitioned_relabel.hh
, spot/priv/partitioned_relabel.cc: try_partition_me,
computes the partition of a given vector of bdds
* spot/twaalgos/relabel.hh
, spot/twaalgos/relabel.cc: Here. Adapt also relabel()
to cope with the different type of relabeling_maps
* tests/python/_partitioned_relabel.ipynb
, tests/python/except.py: Test and Usage
* tests/Makefile.am: Add test
2022-12-09 17:00:51 +01:00

1224 lines
64 KiB
Text

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "4d896402",
"metadata": {},
"outputs": [],
"source": [
"import spot, buddy"
]
},
{
"cell_type": "markdown",
"id": "94e87f9c",
"metadata": {},
"source": [
"# Partitioned relabeling\n",
"\n",
"Partitioned relabeling will:\n",
"First compute a partition over all conditions appearing in the automaton.\n",
"That is, the set of new conditions is such that (1) they do not overlap (2) all valuations that verify some condition in the original automaton also verify (exactly one) of the new conditions.\n",
"These new conditions can be thought of as letters in a \"classical\" sense.\n",
"Then we create new aps and encode the \"number\" of these letters using the fresh aps, resulting in new letters which are a single valuation over the fresh aps.\n",
"\n",
"This can be helpful if there are many aps, but few different conditions over them\n",
"\n",
"The algorithm comes in two flavours:\n",
"\n",
"We maintain the original number of edges. Therefore the new label correspond to a disjunction over new letters (split=False).\n",
"We split each edge into its letters, creating more edges (split=True)."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "62123fa9",
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"300pt\" height=\"244pt\"\n",
" viewBox=\"0.00 0.00 300.00 244.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 240)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-240 296,-240 296,4 -4,4\"/>\n",
"<text text-anchor=\"middle\" x=\"146\" y=\"-220.8\" font-family=\"Times,serif\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"middle\" x=\"146\" y=\"-205.8\" font-family=\"Times,serif\" font-size=\"14.00\">[all]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"56\" cy=\"-99\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-95.3\" font-family=\"Times,serif\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-99C2.67,-99 15.1,-99 27.63,-99\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"27.94,-102.5 37.94,-99 27.94,-95.5 27.94,-102.5\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"274\" cy=\"-180\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"274\" y=\"-176.3\" font-family=\"Times,serif\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M66.23,-114.06C72.43,-122.94 81.41,-133.64 92,-140 140.84,-169.33 208.68,-177.22 245.9,-179.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"245.82,-182.8 255.97,-179.76 246.14,-175.81 245.82,-182.8\"/>\n",
"<text text-anchor=\"middle\" x=\"165\" y=\"-181.8\" font-family=\"Times,serif\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"274\" cy=\"-126\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"274\" y=\"-122.3\" font-family=\"Times,serif\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.95,-101.12C111.24,-105.78 200.66,-116.96 245.86,-122.61\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"245.47,-126.09 255.83,-123.85 246.34,-119.14 245.47,-126.09\"/>\n",
"<text text-anchor=\"middle\" x=\"165\" y=\"-124.8\" font-family=\"Times,serif\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"274\" cy=\"-72\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"274\" y=\"-68.3\" font-family=\"Times,serif\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M72.29,-91.11C78.28,-88.38 85.31,-85.6 92,-84 145.28,-71.21 209.75,-70.26 245.59,-70.97\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"245.66,-74.47 255.74,-71.23 245.84,-67.47 245.66,-74.47\"/>\n",
"<text text-anchor=\"middle\" x=\"165\" y=\"-87.8\" font-family=\"Times,serif\" font-size=\"14.00\">a &amp; b0 &amp; b1 &amp; b2</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"274\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"274\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;4 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>0&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M64.51,-83.09C70.45,-72.31 79.77,-58.68 92,-51 139.89,-20.94 208.1,-16.67 245.62,-16.9\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"245.73,-20.4 255.79,-17.08 245.85,-13.4 245.73,-20.4\"/>\n",
"<text text-anchor=\"middle\" x=\"165\" y=\"-54.8\" font-family=\"Times,serif\" font-size=\"14.00\">a &amp; !b0 &amp; !b1 &amp; !b2</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f65b0311a80> >"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Relabeling a graph\n",
"aut = spot.make_twa_graph()\n",
"aut.new_states(5)\n",
"\n",
"a = buddy.bdd_ithvar(aut.register_ap(\"a\"))\n",
"na = buddy.bdd_nithvar(aut.register_ap(\"a\"))\n",
"b0 = buddy.bdd_ithvar(aut.register_ap(\"b0\"))\n",
"nb0 = buddy.bdd_nithvar(aut.register_ap(\"b0\"))\n",
"b1 = buddy.bdd_ithvar(aut.register_ap(\"b1\"))\n",
"nb1 = buddy.bdd_nithvar(aut.register_ap(\"b1\"))\n",
"b2 = buddy.bdd_ithvar(aut.register_ap(\"b2\"))\n",
"nb2 = buddy.bdd_nithvar(aut.register_ap(\"b2\"))\n",
"\n",
"aut.new_edge(0,1,buddy.bddtrue)\n",
"aut.new_edge(0,2,a)\n",
"aut.new_edge(0,3,a&b0&b1&b2)\n",
"aut.new_edge(0,4,a&nb0&nb1&nb2)\n",
"\n",
"aut"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "d4c8e977",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"6\n"
]
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"262pt\" height=\"244pt\"\n",
" viewBox=\"0.00 0.00 262.00 244.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 240)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-240 258,-240 258,4 -4,4\"/>\n",
"<text text-anchor=\"middle\" x=\"127\" y=\"-220.8\" font-family=\"Times,serif\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"middle\" x=\"127\" y=\"-205.8\" font-family=\"Times,serif\" font-size=\"14.00\">[all]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"56\" cy=\"-99\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-95.3\" font-family=\"Times,serif\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-99C2.67,-99 15.1,-99 27.63,-99\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"27.94,-102.5 37.94,-99 27.94,-95.5 27.94,-102.5\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"236\" cy=\"-180\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"236\" y=\"-176.3\" font-family=\"Times,serif\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M66.73,-113.86C73,-122.36 81.87,-132.57 92,-139 128.12,-161.93 177.37,-172.35 207.64,-176.85\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"207.49,-180.36 217.87,-178.25 208.44,-173.43 207.49,-180.36\"/>\n",
"<text text-anchor=\"middle\" x=\"146\" y=\"-178.8\" font-family=\"Times,serif\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"236\" cy=\"-126\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"236\" y=\"-122.3\" font-family=\"Times,serif\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.07,-101.59C105.03,-106.29 170.7,-116.25 207.87,-121.88\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"207.57,-125.38 217.98,-123.42 208.62,-118.46 207.57,-125.38\"/>\n",
"<text text-anchor=\"middle\" x=\"146\" y=\"-123.8\" font-family=\"Times,serif\" font-size=\"14.00\">__nv0 | __nv1</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"236\" cy=\"-72\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"236\" y=\"-68.3\" font-family=\"Times,serif\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M72.71,-91.59C78.63,-89.1 85.51,-86.56 92,-85 131.33,-75.56 178.26,-72.86 207.35,-72.15\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"207.63,-75.65 217.57,-71.97 207.51,-68.65 207.63,-75.65\"/>\n",
"<text text-anchor=\"middle\" x=\"146\" y=\"-88.8\" font-family=\"Times,serif\" font-size=\"14.00\">!__nv0 &amp; __nv1</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"236\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"236\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;4 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>0&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M65.34,-83.09C71.42,-73 80.59,-60.48 92,-53 127.41,-29.79 176.87,-21.96 207.37,-19.33\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"207.97,-22.79 217.69,-18.57 207.46,-15.81 207.97,-22.79\"/>\n",
"<text text-anchor=\"middle\" x=\"146\" y=\"-56.8\" font-family=\"Times,serif\" font-size=\"14.00\">__nv0 &amp; __nv1</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f65b0311a80> >"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"relabel_dict = spot.partitioned_relabel_here(aut)\n",
"\n",
"print(relabel_dict.size())\n",
"aut"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "6f90a095",
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"300pt\" height=\"244pt\"\n",
" viewBox=\"0.00 0.00 300.00 244.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 240)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-240 296,-240 296,4 -4,4\"/>\n",
"<text text-anchor=\"middle\" x=\"146\" y=\"-220.8\" font-family=\"Times,serif\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"middle\" x=\"146\" y=\"-205.8\" font-family=\"Times,serif\" font-size=\"14.00\">[all]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"56\" cy=\"-99\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-95.3\" font-family=\"Times,serif\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-99C2.67,-99 15.1,-99 27.63,-99\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"27.94,-102.5 37.94,-99 27.94,-95.5 27.94,-102.5\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"274\" cy=\"-180\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"274\" y=\"-176.3\" font-family=\"Times,serif\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M66.23,-114.06C72.43,-122.94 81.41,-133.64 92,-140 140.84,-169.33 208.68,-177.22 245.9,-179.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"245.82,-182.8 255.97,-179.76 246.14,-175.81 245.82,-182.8\"/>\n",
"<text text-anchor=\"middle\" x=\"165\" y=\"-181.8\" font-family=\"Times,serif\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"274\" cy=\"-126\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"274\" y=\"-122.3\" font-family=\"Times,serif\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.95,-101.12C111.24,-105.78 200.66,-116.96 245.86,-122.61\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"245.47,-126.09 255.83,-123.85 246.34,-119.14 245.47,-126.09\"/>\n",
"<text text-anchor=\"middle\" x=\"165\" y=\"-124.8\" font-family=\"Times,serif\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"274\" cy=\"-72\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"274\" y=\"-68.3\" font-family=\"Times,serif\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M72.29,-91.11C78.28,-88.38 85.31,-85.6 92,-84 145.28,-71.21 209.75,-70.26 245.59,-70.97\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"245.66,-74.47 255.74,-71.23 245.84,-67.47 245.66,-74.47\"/>\n",
"<text text-anchor=\"middle\" x=\"165\" y=\"-87.8\" font-family=\"Times,serif\" font-size=\"14.00\">a &amp; b0 &amp; b1 &amp; b2</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"274\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"274\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;4 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>0&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M64.51,-83.09C70.45,-72.31 79.77,-58.68 92,-51 139.89,-20.94 208.1,-16.67 245.62,-16.9\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"245.73,-20.4 255.79,-17.08 245.85,-13.4 245.73,-20.4\"/>\n",
"<text text-anchor=\"middle\" x=\"165\" y=\"-54.8\" font-family=\"Times,serif\" font-size=\"14.00\">a &amp; !b0 &amp; !b1 &amp; !b2</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f65b0311a80> >"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Undo the relabeling\n",
"spot.relabel_here(aut, relabel_dict)\n",
"aut"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "513067ab",
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"300pt\" height=\"244pt\"\n",
" viewBox=\"0.00 0.00 300.00 244.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 240)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-240 296,-240 296,4 -4,4\"/>\n",
"<text text-anchor=\"middle\" x=\"146\" y=\"-220.8\" font-family=\"Times,serif\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"middle\" x=\"146\" y=\"-205.8\" font-family=\"Times,serif\" font-size=\"14.00\">[all]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"56\" cy=\"-99\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-95.3\" font-family=\"Times,serif\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-99C2.67,-99 15.1,-99 27.63,-99\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"27.94,-102.5 37.94,-99 27.94,-95.5 27.94,-102.5\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"274\" cy=\"-180\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"274\" y=\"-176.3\" font-family=\"Times,serif\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M66.23,-114.06C72.43,-122.94 81.41,-133.64 92,-140 140.84,-169.33 208.68,-177.22 245.9,-179.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"245.82,-182.8 255.97,-179.76 246.14,-175.81 245.82,-182.8\"/>\n",
"<text text-anchor=\"middle\" x=\"165\" y=\"-181.8\" font-family=\"Times,serif\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"274\" cy=\"-126\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"274\" y=\"-122.3\" font-family=\"Times,serif\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M73.95,-101.12C111.24,-105.78 200.66,-116.96 245.86,-122.61\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"245.47,-126.09 255.83,-123.85 246.34,-119.14 245.47,-126.09\"/>\n",
"<text text-anchor=\"middle\" x=\"165\" y=\"-124.8\" font-family=\"Times,serif\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"274\" cy=\"-72\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"274\" y=\"-68.3\" font-family=\"Times,serif\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M72.29,-91.11C78.28,-88.38 85.31,-85.6 92,-84 145.28,-71.21 209.75,-70.26 245.59,-70.97\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"245.66,-74.47 255.74,-71.23 245.84,-67.47 245.66,-74.47\"/>\n",
"<text text-anchor=\"middle\" x=\"165\" y=\"-87.8\" font-family=\"Times,serif\" font-size=\"14.00\">a &amp; b0 &amp; b1 &amp; b2</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"274\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"274\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;4 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>0&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M64.51,-83.09C70.45,-72.31 79.77,-58.68 92,-51 139.89,-20.94 208.1,-16.67 245.62,-16.9\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"245.73,-20.4 255.79,-17.08 245.85,-13.4 245.73,-20.4\"/>\n",
"<text text-anchor=\"middle\" x=\"165\" y=\"-54.8\" font-family=\"Times,serif\" font-size=\"14.00\">a &amp; !b0 &amp; !b1 &amp; !b2</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f65b02c0d50> >"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"HOA: v1\n",
"States: 5\n",
"Start: 0\n",
"AP: 6 \"a\" \"b0\" \"b1\" \"b2\" \"__nv0\" \"__nv1\"\n",
"acc-name: all\n",
"Acceptance: 0 t\n",
"properties: trans-labels explicit-labels state-acc\n",
"--BODY--\n",
"State: 0\n",
"[!4&!5] 1\n",
"[4&!5] 2\n",
"[!4&5] 3\n",
"[4&5] 4\n",
"[4&!5] 1\n",
"[4&5] 1\n",
"[!4&5] 1\n",
"[4&5] 2\n",
"[!4&5] 2\n",
"State: 1\n",
"State: 2\n",
"State: 3\n",
"State: 4\n",
"--END--\n"
]
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"268pt\" height=\"396pt\"\n",
" viewBox=\"0.00 0.00 268.00 396.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 392)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-392 264,-392 264,4 -4,4\"/>\n",
"<text text-anchor=\"middle\" x=\"130\" y=\"-372.8\" font-family=\"Times,serif\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"middle\" x=\"130\" y=\"-357.8\" font-family=\"Times,serif\" font-size=\"14.00\">[all]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"56\" cy=\"-186\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-182.3\" font-family=\"Times,serif\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-186C2.67,-186 15.1,-186 27.63,-186\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"27.94,-189.5 37.94,-186 27.94,-182.5 27.94,-189.5\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"242\" cy=\"-281\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"242\" y=\"-277.3\" font-family=\"Times,serif\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M59.13,-203.75C63.41,-236.05 74.19,-302.35 92,-316 132.21,-346.82 159.19,-335.39 206,-316 212.83,-313.17 219.02,-308.29 224.23,-303.06\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"227.07,-305.13 231.12,-295.34 221.85,-300.47 227.07,-305.13\"/>\n",
"<text text-anchor=\"middle\" x=\"149\" y=\"-338.8\" font-family=\"Times,serif\" font-size=\"14.00\">!__nv0 &amp; !__nv1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M58.11,-204.13C60.52,-225.78 68.11,-261.17 92,-278 128.11,-303.44 182.31,-296.28 214.42,-288.69\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"215.58,-292.01 224.41,-286.15 213.85,-285.23 215.58,-292.01\"/>\n",
"<text text-anchor=\"middle\" x=\"149\" y=\"-298.8\" font-family=\"Times,serif\" font-size=\"14.00\">__nv0 &amp; !__nv1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M63.39,-202.64C69.02,-214.97 78.45,-231.12 92,-240 134.95,-268.17 157.98,-240.75 206,-259 210.15,-260.58 214.34,-262.68 218.31,-264.96\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"216.7,-268.08 227.03,-270.43 220.42,-262.15 216.7,-268.08\"/>\n",
"<text text-anchor=\"middle\" x=\"149\" y=\"-262.8\" font-family=\"Times,serif\" font-size=\"14.00\">__nv0 &amp; __nv1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M72.34,-194.07C78.33,-196.94 85.36,-199.97 92,-202 141.12,-217.03 163.72,-191.83 206,-221 217.75,-229.11 226.12,-242.54 231.72,-254.65\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"228.52,-256.08 235.63,-263.94 234.97,-253.37 228.52,-256.08\"/>\n",
"<text text-anchor=\"middle\" x=\"149\" y=\"-224.8\" font-family=\"Times,serif\" font-size=\"14.00\">!__nv0 &amp; __nv1</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"242\" cy=\"-148\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"242\" y=\"-144.3\" font-family=\"Times,serif\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.32,-185.03C102.46,-183.1 159.61,-177.73 206,-164 209.44,-162.98 212.97,-161.69 216.4,-160.28\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"217.98,-163.41 225.68,-156.14 215.12,-157.02 217.98,-163.41\"/>\n",
"<text text-anchor=\"middle\" x=\"149\" y=\"-186.8\" font-family=\"Times,serif\" font-size=\"14.00\">__nv0 &amp; !__nv1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M65.51,-170.52C71.56,-161.24 80.61,-150.25 92,-145 131.51,-126.78 183.41,-133.79 214.37,-140.75\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"213.85,-144.22 224.4,-143.17 215.5,-137.42 213.85,-144.22\"/>\n",
"<text text-anchor=\"middle\" x=\"149\" y=\"-148.8\" font-family=\"Times,serif\" font-size=\"14.00\">__nv0 &amp; __nv1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M60.12,-168.2C64.19,-150.97 73.15,-125.8 92,-114 134.95,-87.12 159.05,-94.95 206,-114 212.65,-116.7 218.72,-121.33 223.88,-126.32\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"221.37,-128.76 230.74,-133.71 226.5,-124 221.37,-128.76\"/>\n",
"<text text-anchor=\"middle\" x=\"149\" y=\"-117.8\" font-family=\"Times,serif\" font-size=\"14.00\">!__nv0 &amp; __nv1</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"242\" cy=\"-72\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"242\" y=\"-68.3\" font-family=\"Times,serif\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M56.9,-167.75C57.88,-142.69 63.77,-98.32 92,-77 127.44,-50.23 182.32,-57.1 214.65,-64.54\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"214.14,-68.02 224.69,-67.04 215.83,-61.23 214.14,-68.02\"/>\n",
"<text text-anchor=\"middle\" x=\"149\" y=\"-80.8\" font-family=\"Times,serif\" font-size=\"14.00\">!__nv0 &amp; __nv1</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"242\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"242\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;4 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>0&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M58.74,-168.01C62.55,-132.5 72.87,-55.33 92,-38 125.2,-7.93 180.84,-9.19 213.92,-13.28\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"213.81,-16.8 224.21,-14.74 214.8,-9.87 213.81,-16.8\"/>\n",
"<text text-anchor=\"middle\" x=\"149\" y=\"-41.8\" font-family=\"Times,serif\" font-size=\"14.00\">__nv0 &amp; __nv1</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f65b02c0d50> >"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Relabeling the same graph using the split option\n",
"aut = spot.make_twa_graph()\n",
"aut.new_states(5)\n",
"\n",
"a = buddy.bdd_ithvar(aut.register_ap(\"a\"))\n",
"na = buddy.bdd_nithvar(aut.register_ap(\"a\"))\n",
"b0 = buddy.bdd_ithvar(aut.register_ap(\"b0\"))\n",
"nb0 = buddy.bdd_nithvar(aut.register_ap(\"b0\"))\n",
"b1 = buddy.bdd_ithvar(aut.register_ap(\"b1\"))\n",
"nb1 = buddy.bdd_nithvar(aut.register_ap(\"b1\"))\n",
"b2 = buddy.bdd_ithvar(aut.register_ap(\"b2\"))\n",
"nb2 = buddy.bdd_nithvar(aut.register_ap(\"b2\"))\n",
"\n",
"aut.new_edge(0,1,buddy.bddtrue)\n",
"aut.new_edge(0,2,a)\n",
"aut.new_edge(0,3,a&b0&b1&b2)\n",
"aut.new_edge(0,4,a&nb0&nb1&nb2)\n",
"\n",
"display(aut)\n",
"xx = spot.partitioned_relabel_here(aut, True)\n",
"print(aut.to_str(\"hoa\"))\n",
"aut"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "50c6a08b",
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"612pt\" height=\"451pt\"\n",
" viewBox=\"0.00 0.00 612.00 451.24\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 447.24)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-447.24 608,-447.24 608,4 -4,4\"/>\n",
"<text text-anchor=\"middle\" x=\"302\" y=\"-428.04\" font-family=\"Times,serif\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"middle\" x=\"302\" y=\"-413.04\" font-family=\"Times,serif\" font-size=\"14.00\">[all]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"56\" cy=\"-222.24\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-218.54\" font-family=\"Times,serif\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-222.24C2.67,-222.24 15.1,-222.24 27.63,-222.24\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"27.94,-225.74 37.94,-222.24 27.94,-218.74 27.94,-225.74\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"586\" cy=\"-317.24\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"586\" y=\"-313.54\" font-family=\"Times,serif\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M59.13,-239.99C63.41,-272.29 74.19,-338.59 92,-352.24 172.78,-414.15 455.97,-391.18 550,-352.24 556.83,-349.41 563.02,-344.53 568.23,-339.3\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"571.07,-341.37 575.12,-331.58 565.85,-336.71 571.07,-341.37\"/>\n",
"<text text-anchor=\"middle\" x=\"321\" y=\"-394.04\" font-family=\"Times,serif\" font-size=\"14.00\">!a</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M58.07,-240.42C60.44,-262.12 67.99,-297.58 92,-314.24 130.26,-340.78 459.71,-324.37 557.65,-318.84\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"558.13,-322.32 567.91,-318.26 557.73,-315.33 558.13,-322.32\"/>\n",
"<text text-anchor=\"middle\" x=\"321\" y=\"-332.04\" font-family=\"Times,serif\" font-size=\"14.00\">(a &amp; !b0 &amp; b2) | (a &amp; b0 &amp; !b2) | (a &amp; !b1 &amp; b2) | (a &amp; b1 &amp; !b2)</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M62.99,-239.1C68.44,-251.72 77.83,-268.15 92,-276.24 136.24,-301.48 501.36,-280.12 550,-295.24 554.44,-296.62 558.87,-298.7 563.01,-301.06\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"561.2,-304.05 571.52,-306.45 564.95,-298.14 561.2,-304.05\"/>\n",
"<text text-anchor=\"middle\" x=\"321\" y=\"-299.04\" font-family=\"Times,serif\" font-size=\"14.00\">a &amp; !b0 &amp; !b1 &amp; !b2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M72.22,-230.75C78.2,-233.67 85.24,-236.62 92,-238.24 141.53,-250.1 506.37,-230.96 550,-257.24 562.31,-264.65 570.74,-278.16 576.24,-290.48\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"573.07,-291.99 580.04,-299.98 579.57,-289.39 573.07,-291.99\"/>\n",
"<text text-anchor=\"middle\" x=\"321\" y=\"-261.04\" font-family=\"Times,serif\" font-size=\"14.00\">a &amp; b0 &amp; b1 &amp; b2</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"586\" cy=\"-184.24\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"586\" y=\"-180.54\" font-family=\"Times,serif\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.06,-222.35C149.91,-222.71 456.82,-222.71 550,-200.24 553.48,-199.4 557.04,-198.21 560.49,-196.85\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"562.05,-199.99 569.78,-192.74 559.22,-193.59 562.05,-199.99\"/>\n",
"<text text-anchor=\"middle\" x=\"321\" y=\"-226.04\" font-family=\"Times,serif\" font-size=\"14.00\">(a &amp; !b0 &amp; b2) | (a &amp; b0 &amp; !b2) | (a &amp; !b1 &amp; b2) | (a &amp; b1 &amp; !b2)</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M65.51,-206.75C71.56,-197.48 80.61,-186.49 92,-181.24 138.21,-159.93 499.16,-179.06 550,-181.24 552.56,-181.35 555.22,-181.5 557.88,-181.68\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"557.68,-185.18 567.93,-182.48 558.24,-178.2 557.68,-185.18\"/>\n",
"<text text-anchor=\"middle\" x=\"321\" y=\"-185.04\" font-family=\"Times,serif\" font-size=\"14.00\">a &amp; !b0 &amp; !b1 &amp; !b2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M60.35,-204.59C64.57,-187.85 73.62,-163.59 92,-152.24 135.29,-125.48 502.56,-133.82 550,-152.24 556.25,-154.66 562.06,-158.78 567.08,-163.27\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"564.72,-165.85 574.27,-170.43 569.66,-160.9 564.72,-165.85\"/>\n",
"<text text-anchor=\"middle\" x=\"321\" y=\"-156.04\" font-family=\"Times,serif\" font-size=\"14.00\">a &amp; b0 &amp; b1 &amp; b2</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"586\" cy=\"-108.24\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"586\" y=\"-104.54\" font-family=\"Times,serif\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M56.96,-204.23C58,-179.53 63.98,-135.86 92,-115.24 166.36,-60.51 465.49,-93.05 557.76,-104.64\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"557.6,-108.15 567.96,-105.94 558.48,-101.2 557.6,-108.15\"/>\n",
"<text text-anchor=\"middle\" x=\"321\" y=\"-119.04\" font-family=\"Times,serif\" font-size=\"14.00\">a &amp; b0 &amp; b1 &amp; b2</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"586\" cy=\"-54.24\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"586\" y=\"-50.54\" font-family=\"Times,serif\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;4 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>0&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M58.31,-204.13C61.42,-166.67 70.68,-82.72 92,-65.24 232.33,49.85 478.3,-18.12 558.73,-44.89\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"557.95,-48.32 568.54,-48.23 560.2,-41.7 557.95,-48.32\"/>\n",
"<text text-anchor=\"middle\" x=\"321\" y=\"-69.04\" font-family=\"Times,serif\" font-size=\"14.00\">a &amp; !b0 &amp; !b1 &amp; !b2</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f65b02c0d50> >"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Undo the relabeling -> disjoint conditions over the original ap\n",
"spot.relabel_here(aut, relabel_dict)\n",
"aut"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "d2efd313",
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"200pt\" height=\"298pt\"\n",
" viewBox=\"0.00 0.00 200.00 298.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 294)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-294 196,-294 196,4 -4,4\"/>\n",
"<text text-anchor=\"middle\" x=\"96\" y=\"-274.8\" font-family=\"Times,serif\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"middle\" x=\"96\" y=\"-259.8\" font-family=\"Times,serif\" font-size=\"14.00\">[all]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"56\" cy=\"-126\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-122.3\" font-family=\"Times,serif\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-126C2.67,-126 15.1,-126 27.63,-126\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"27.94,-129.5 37.94,-126 27.94,-122.5 27.94,-129.5\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"174\" cy=\"-234\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"174\" y=\"-230.3\" font-family=\"Times,serif\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M64.14,-142.16C70.23,-154.65 79.92,-171.8 92,-184 108.13,-200.3 130.58,-213.62 147.75,-222.4\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"146.64,-225.76 157.16,-227.03 149.74,-219.48 146.64,-225.76\"/>\n",
"<text text-anchor=\"middle\" x=\"115\" y=\"-219.8\" font-family=\"Times,serif\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"174\" cy=\"-180\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"174\" y=\"-176.3\" font-family=\"Times,serif\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M72.18,-134.62C78.28,-137.99 85.41,-141.8 92,-145 110.37,-153.93 131.57,-163.05 147.68,-169.74\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"146.4,-173 156.98,-173.57 149.06,-166.53 146.4,-173\"/>\n",
"<text text-anchor=\"middle\" x=\"115\" y=\"-168.8\" font-family=\"Times,serif\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"174\" cy=\"-126\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"174\" y=\"-122.3\" font-family=\"Times,serif\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.12,-126C92.96,-126 123.53,-126 145.7,-126\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"145.81,-129.5 155.81,-126 145.81,-122.5 145.81,-129.5\"/>\n",
"<text text-anchor=\"middle\" x=\"115\" y=\"-129.8\" font-family=\"Times,serif\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"174\" cy=\"-72\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"174\" y=\"-68.3\" font-family=\"Times,serif\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;4 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>0&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M72.18,-117.38C78.28,-114.01 85.41,-110.2 92,-107 110.37,-98.07 131.57,-88.95 147.68,-82.26\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"149.06,-85.47 156.98,-78.43 146.4,-79 149.06,-85.47\"/>\n",
"<text text-anchor=\"middle\" x=\"115\" y=\"-110.8\" font-family=\"Times,serif\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>5</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"174\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"174\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;5 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>0&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M63.93,-109.78C69.96,-97.04 79.67,-79.43 92,-67 108.06,-50.8 130.51,-37.77 147.7,-29.23\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"149.61,-32.19 157.13,-24.73 146.6,-25.88 149.61,-32.19\"/>\n",
"<text text-anchor=\"middle\" x=\"115\" y=\"-70.8\" font-family=\"Times,serif\" font-size=\"14.00\">c</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f65b02c90f0> >"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"HOA: v1\n",
"States: 6\n",
"Start: 0\n",
"AP: 5 \"a\" \"__nv0\" \"__nv1\" \"b\" \"c\"\n",
"acc-name: all\n",
"Acceptance: 0 t\n",
"properties: trans-labels explicit-labels state-acc\n",
"--BODY--\n",
"State: 0\n",
"[!1 | !2] 1\n",
"[!1&2 | 1&!2] 2\n",
"[!1&2] 3\n",
"[1&!2] 4\n",
"[4] 5\n",
"State: 1\n",
"State: 2\n",
"State: 3\n",
"State: 4\n",
"State: 5\n",
"--END--\n"
]
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"404pt\" height=\"304pt\"\n",
" viewBox=\"0.00 0.00 404.00 304.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 300)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-300 400,-300 400,4 -4,4\"/>\n",
"<text text-anchor=\"middle\" x=\"198\" y=\"-280.8\" font-family=\"Times,serif\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"middle\" x=\"198\" y=\"-265.8\" font-family=\"Times,serif\" font-size=\"14.00\">[all]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"56\" cy=\"-126\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-122.3\" font-family=\"Times,serif\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-126C2.67,-126 15.1,-126 27.63,-126\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"27.94,-129.5 37.94,-126 27.94,-122.5 27.94,-129.5\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"378\" cy=\"-234\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"378\" y=\"-230.3\" font-family=\"Times,serif\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M60.53,-143.63C64.89,-160.47 74.04,-185.12 92,-198 171.23,-254.8 295.62,-245.85 350.02,-238.44\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"350.54,-241.9 359.93,-237 349.53,-234.97 350.54,-241.9\"/>\n",
"<text text-anchor=\"middle\" x=\"217\" y=\"-246.8\" font-family=\"Times,serif\" font-size=\"14.00\">!__nv0 | !__nv1</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"378\" cy=\"-180\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"378\" y=\"-176.3\" font-family=\"Times,serif\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M71.44,-135.43C77.55,-138.99 84.89,-142.72 92,-145 183.31,-174.23 298.27,-179.29 349.82,-180.01\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"349.79,-183.51 359.82,-180.1 349.86,-176.51 349.79,-183.51\"/>\n",
"<text text-anchor=\"middle\" x=\"217\" y=\"-182.8\" font-family=\"Times,serif\" font-size=\"14.00\">(__nv0 &amp; !__nv1) | (!__nv0 &amp; __nv1)</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"378\" cy=\"-126\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"378\" y=\"-122.3\" font-family=\"Times,serif\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.2,-126C126.73,-126 285.32,-126 349.55,-126\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"349.71,-129.5 359.71,-126 349.71,-122.5 349.71,-129.5\"/>\n",
"<text text-anchor=\"middle\" x=\"217\" y=\"-129.8\" font-family=\"Times,serif\" font-size=\"14.00\">!__nv0 &amp; __nv1</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"378\" cy=\"-72\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"378\" y=\"-68.3\" font-family=\"Times,serif\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;4 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>0&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M71.44,-116.57C77.55,-113.01 84.89,-109.28 92,-107 183.31,-77.77 298.27,-72.71 349.82,-71.99\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"349.86,-75.49 359.82,-71.9 349.79,-68.49 349.86,-75.49\"/>\n",
"<text text-anchor=\"middle\" x=\"217\" y=\"-110.8\" font-family=\"Times,serif\" font-size=\"14.00\">__nv0 &amp; !__nv1</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>5</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"378\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"378\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;5 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>0&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M60.37,-108.44C64.63,-91.36 73.74,-66.12 92,-53 171.14,3.85 295.58,-5.71 350.01,-13.41\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"349.51,-16.87 359.92,-14.9 350.56,-9.95 349.51,-16.87\"/>\n",
"<text text-anchor=\"middle\" x=\"217\" y=\"-56.8\" font-family=\"Times,serif\" font-size=\"14.00\">c</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f65b02c90f0> >"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Working only on a subset of the aps\n",
"# Note that True is always relabeled\n",
"\n",
"aut = spot.make_twa_graph()\n",
"aut.new_states(6)\n",
"\n",
"a = buddy.bdd_ithvar(aut.register_ap(\"a\"))\n",
"na = buddy.bdd_nithvar(aut.register_ap(\"a\"))\n",
"b = buddy.bdd_ithvar(aut.register_ap(\"b\"))\n",
"nb = buddy.bdd_nithvar(aut.register_ap(\"b\"))\n",
"c = buddy.bdd_ithvar(aut.register_ap(\"c\"))\n",
"nc = buddy.bdd_nithvar(aut.register_ap(\"c\"))\n",
"\n",
"aut.new_edge(0,1,buddy.bddtrue)\n",
"aut.new_edge(0,2,a)\n",
"aut.new_edge(0,3,a&b)\n",
"aut.new_edge(0,4,a&nb)\n",
"aut.new_edge(0,5,c)\n",
"\n",
"display(aut)\n",
"\n",
"concerned_aps = a & b # concerned aps are given as a conjunction of positive aps\n",
"# As partitioning can be exponentially costly,\n",
"# one can limit the number of new letters generated before abadoning\n",
"# This can be done either as a hard limit and/or as the number of current condition\n",
"# times a factor\n",
"relabel_dict = spot.partitioned_relabel_here(aut, False, 1000, 1000, concerned_aps)\n",
"print(aut.to_str(\"hoa\"))\n",
"aut"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "1fbc8813",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"HOA: v1\n",
"States: 6\n",
"Start: 0\n",
"AP: 3 \"a\" \"b\" \"c\"\n",
"acc-name: all\n",
"Acceptance: 0 t\n",
"properties: trans-labels explicit-labels state-acc\n",
"--BODY--\n",
"State: 0\n",
"[t] 1\n",
"[0] 2\n",
"[0&1] 3\n",
"[0&!1] 4\n",
"[2] 5\n",
"State: 1\n",
"State: 2\n",
"State: 3\n",
"State: 4\n",
"State: 5\n",
"--END--\n"
]
},
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"200pt\" height=\"298pt\"\n",
" viewBox=\"0.00 0.00 200.00 298.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 294)\">\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-294 196,-294 196,4 -4,4\"/>\n",
"<text text-anchor=\"middle\" x=\"96\" y=\"-274.8\" font-family=\"Times,serif\" font-size=\"14.00\">t</text>\n",
"<text text-anchor=\"middle\" x=\"96\" y=\"-259.8\" font-family=\"Times,serif\" font-size=\"14.00\">[all]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"56\" cy=\"-126\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-122.3\" font-family=\"Times,serif\" font-size=\"14.00\">0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-126C2.67,-126 15.1,-126 27.63,-126\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"27.94,-129.5 37.94,-126 27.94,-122.5 27.94,-129.5\"/>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"174\" cy=\"-234\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"174\" y=\"-230.3\" font-family=\"Times,serif\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M64.14,-142.16C70.23,-154.65 79.92,-171.8 92,-184 108.13,-200.3 130.58,-213.62 147.75,-222.4\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"146.64,-225.76 157.16,-227.03 149.74,-219.48 146.64,-225.76\"/>\n",
"<text text-anchor=\"middle\" x=\"115\" y=\"-219.8\" font-family=\"Times,serif\" font-size=\"14.00\">1</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"174\" cy=\"-180\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"174\" y=\"-176.3\" font-family=\"Times,serif\" font-size=\"14.00\">2</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M72.18,-134.62C78.28,-137.99 85.41,-141.8 92,-145 110.37,-153.93 131.57,-163.05 147.68,-169.74\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"146.4,-173 156.98,-173.57 149.06,-166.53 146.4,-173\"/>\n",
"<text text-anchor=\"middle\" x=\"115\" y=\"-168.8\" font-family=\"Times,serif\" font-size=\"14.00\">a</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"174\" cy=\"-126\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"174\" y=\"-122.3\" font-family=\"Times,serif\" font-size=\"14.00\">3</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.12,-126C92.96,-126 123.53,-126 145.7,-126\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"145.81,-129.5 155.81,-126 145.81,-122.5 145.81,-129.5\"/>\n",
"<text text-anchor=\"middle\" x=\"115\" y=\"-129.8\" font-family=\"Times,serif\" font-size=\"14.00\">a &amp; b</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"174\" cy=\"-72\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"174\" y=\"-68.3\" font-family=\"Times,serif\" font-size=\"14.00\">4</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;4 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>0&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M72.18,-117.38C78.28,-114.01 85.41,-110.2 92,-107 110.37,-98.07 131.57,-88.95 147.68,-82.26\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"149.06,-85.47 156.98,-78.43 146.4,-79 149.06,-85.47\"/>\n",
"<text text-anchor=\"middle\" x=\"115\" y=\"-110.8\" font-family=\"Times,serif\" font-size=\"14.00\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>5</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"174\" cy=\"-18\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"174\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">5</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;5 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>0&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M63.93,-109.78C69.96,-97.04 79.67,-79.43 92,-67 108.06,-50.8 130.51,-37.77 147.7,-29.23\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"149.61,-32.19 157.13,-24.73 146.6,-25.88 149.61,-32.19\"/>\n",
"<text text-anchor=\"middle\" x=\"115\" y=\"-70.8\" font-family=\"Times,serif\" font-size=\"14.00\">c</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f65b02c90f0> >"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#undo partial relabeling\n",
"spot.relabel_here(aut, relabel_dict)\n",
"print(aut.to_str(\"hoa\"))\n",
"aut"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}