simulation: fix merging transiant SCCs

This fixes #452, and also fix a bug related to transiant SCCs
incorrectly merged in cosimulation: the source of the edges was
updated without fixing the chaining of the edges.

* spot/twaalgos/simulation.cc: Fix all the above.
* tests/python/simstate.py: Add test case from issue #452.
* tests/core/det.test, tests/core/ltlsynt.test,
tests/core/satmin.test: Lower expected sizes.
* tests/python/decompose.ipynb: Adjust for changed order.
This commit is contained in:
Alexandre Duret-Lutz 2021-04-19 23:38:50 +02:00
parent cfa3417449
commit fca6513604
6 changed files with 203 additions and 142 deletions

View file

@ -550,16 +550,16 @@ namespace spot
// All states in p.second have the same class, so just // All states in p.second have the same class, so just
// pick the class of the first one first one. // pick the class of the first one first one.
bdd src = previous_class_[p->second.front()]; bdd src = previous_class_[p->second.front()];
assert(gb->get_state(src.id()) == srcst);
// Get the signature to derive successors. // Get the signature to derive successors.
bdd sig = compute_sig(p->second.front()); bdd sig = compute_sig(p->second.front());
assert(signatures.size() == srcst);
signatures.push_back(sig);
if (Cosimulation) if (Cosimulation)
sig = bdd_compose(sig, bddfalse, bdd_var(bdd_initial)); sig = bdd_compose(sig, bddfalse, bdd_var(bdd_initial));
assert(gb->get_state(src.id()) == srcst);
assert(signatures.size() == srcst);
signatures.push_back(bdd_exist(sig, all_proms_));
// Get all the variables in the signature. // Get all the variables in the signature.
bdd sup_sig = bdd_support(sig); bdd sup_sig = bdd_support(sig);
@ -656,6 +656,7 @@ namespace spot
} }
} }
bool need_another_pass = false;
// Attempt to merge trivial SCCs // Attempt to merge trivial SCCs
if (!record_implications_ && res->num_states() > 1) if (!record_implications_ && res->num_states() > 1)
{ {
@ -664,7 +665,10 @@ namespace spot
unsigned nstates = res->num_states(); unsigned nstates = res->num_states();
std::vector<unsigned> redirect(nstates); std::vector<unsigned> redirect(nstates);
std::iota(redirect.begin(), redirect.end(), 0); std::iota(redirect.begin(), redirect.end(), 0);
for (unsigned s = 0; s < nstates; ++s)
signatures[s] = bdd_exist(signatures[s], all_proms_);
bool changed = false; bool changed = false;
bool unchanged = false;
for (unsigned scc = 0; scc < nscc; ++scc) for (unsigned scc = 0; scc < nscc; ++scc)
if (si.is_trivial(scc)) if (si.is_trivial(scc))
{ {
@ -676,8 +680,10 @@ namespace spot
{ {
changed = true; changed = true;
redirect[s] = i; redirect[s] = i;
break; goto if_changed;
} }
unchanged = true;
if_changed:;
} }
if (changed) if (changed)
{ {
@ -688,16 +694,28 @@ namespace spot
for (auto& e: res->edges()) for (auto& e: res->edges())
e.dst = redirect[e.dst]; e.dst = redirect[e.dst];
res->set_init_state(redirect[res->get_init_state_number()]); res->set_init_state(redirect[res->get_init_state_number()]);
} if (Cosimulation)
// Fix chaining of edges with changed sources.
res->merge_edges();
if (unchanged)
need_another_pass = true;
} }
// Remove unreachable states.
// In the case of co-simulation, changing the sources
// of edges, might have created dead states.
//
// If we recorded implications for the determinization // If we recorded implications for the determinization
// procedure, we should not remove unreachable states, as that // procedure, we should not remove unreachable states, as
// will invalidate the contents of the IMPLICATIONS vector. // that will invalidate the contents of the IMPLICATIONS
// It's OK not to purge the result, as the determinization // vector. It's OK not to purge the result in that case,
// will only explore the reachable part anyway. // as the determinization will only explore the reachable
if (!record_implications_) // part anyway.
if (Cosimulation)
res->purge_dead_states();
else
res->purge_unreachable_states(); res->purge_unreachable_states();
}
// Push the common incoming sets to the outgoing edges. // Push the common incoming sets to the outgoing edges.
// Doing so cancels the preprocessing we did in the other // Doing so cancels the preprocessing we did in the other
@ -751,7 +769,12 @@ namespace spot
res->prop_universal(true); res->prop_universal(true);
if (Sba) if (Sba)
res->prop_state_acc(true); res->prop_state_acc(true);
if (!need_another_pass)
return res; return res;
direct_simulation<Cosimulation, Sba> sim(res);
return sim.run();
} }

View file

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Copyright (C) 2013-2020 Laboratoire de Recherche et Développement de # Copyright (C) 2013-2021 Laboratoire de Recherche et Développement de
# l'Epita (LRDE). # l'Epita (LRDE).
# #
# This file is part of Spot, a model checking library. # This file is part of Spot, a model checking library.
@ -42,7 +42,7 @@ cat >formulas <<'EOF'
1,9,X(a R ((!b & F!c) M X!a)) 1,9,X(a R ((!b & F!c) M X!a))
1,2,XG!a R Fb 1,2,XG!a R Fb
1,4,GFc | (a & Fb) 1,4,GFc | (a & Fb)
1,6,X(a R (Fb R F!b)) 1,4,X(a R (Fb R F!b))
1,1,G(Xa M Fa) 1,1,G(Xa M Fa)
1,3,X(Gb | GFa) 1,3,X(Gb | GFa)
1,9,X(Gc | XG((b & Ga) | (!b & F!a))) 1,9,X(Gc | XG((b & Ga) | (!b & F!a)))

View file

@ -1,6 +1,6 @@
#! /bin/sh #! /bin/sh
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Copyright (C) 2017, 2019, 2020 Laboratoire de Recherche et # Copyright (C) 2017, 2019-2021 Laboratoire de Recherche et
# Développement de l'Epita (LRDE). # Développement de l'Epita (LRDE).
# #
# This file is part of Spot, a model checking library. # This file is part of Spot, a model checking library.
@ -376,6 +376,6 @@ diff out exp
f='Fp0 U XX((p0 & F!p1) | (!p0 & Gp1))' f='Fp0 U XX((p0 & F!p1) | (!p0 & Gp1))'
ltlsynt --verbose --algo=ps --outs=p1 --ins=p0 -f "$f" 2>err ltlsynt --verbose --algo=ps --outs=p1 --ins=p0 -f "$f" 2>err
grep 'DPA has 14 states' err grep 'DPA has 13 states' err
ltlsynt --verbose -x wdba-minimize=1 --algo=ps --outs=p1 --ins=p0 -f "$f" 2>err ltlsynt --verbose -x wdba-minimize=1 --algo=ps --outs=p1 --ins=p0 -f "$f" 2>err
grep 'DPA has 12 states' err grep 'DPA has 12 states' err

View file

@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Copyright (C) 2013, 2017, 2018, 2019 Laboratoire de Recherche et Développement # Copyright (C) 2013, 2017-2019, 2021 Laboratoire de Recherche et
# de l'Epita (LRDE). # Développement de l'Epita (LRDE).
# #
# This file is part of Spot, a model checking library. # This file is part of Spot, a model checking library.
# #
@ -1300,8 +1300,8 @@ cat >expected <<'EOF'
"!((G(F(p0))) | ((p1) & (F(p2))))","15",5 "!((G(F(p0))) | ((p1) & (F(p2))))","15",5
"!((G(F(p0))) | ((p1) & (F(p2))))","16",5 "!((G(F(p0))) | ((p1) & (F(p2))))","16",5
"!((G(F(p0))) | ((p1) & (F(p2))))","17",5 "!((G(F(p0))) | ((p1) & (F(p2))))","17",5
"X((p0) R ((F(p1)) R (F(!(p1)))))","1",6 "X((p0) R ((F(p1)) R (F(!(p1)))))","1",4
"X((p0) R ((F(p1)) R (F(!(p1)))))","2",6 "X((p0) R ((F(p1)) R (F(!(p1)))))","2",4
"X((p0) R ((F(p1)) R (F(!(p1)))))","3",4 "X((p0) R ((F(p1)) R (F(!(p1)))))","3",4
"X((p0) R ((F(p1)) R (F(!(p1)))))","4",4 "X((p0) R ((F(p1)) R (F(!(p1)))))","4",4
"X((p0) R ((F(p1)) R (F(!(p1)))))","6",4 "X((p0) R ((F(p1)) R (F(!(p1)))))","6",4

View file

@ -200,7 +200,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa01ba3c0> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f56404b14b0> >"
] ]
}, },
"execution_count": 2, "execution_count": 2,
@ -330,7 +330,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa01ba2a0> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f56404b11b0> >"
] ]
}, },
"execution_count": 3, "execution_count": 3,
@ -489,7 +489,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa01ba1b0> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f56404b1270> >"
] ]
}, },
"execution_count": 4, "execution_count": 4,
@ -587,7 +587,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa01ba9c0> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f56404b18d0> >"
] ]
}, },
"execution_count": 5, "execution_count": 5,
@ -669,7 +669,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00b6240> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f56404b1c00> >"
] ]
}, },
"execution_count": 6, "execution_count": 6,
@ -796,7 +796,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00b6120> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f56404b1f60> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -941,7 +941,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa01bae40> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f56404b1d80> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -1109,7 +1109,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa01baea0> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f56404b1f90> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -1512,7 +1512,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00b6c60> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f56404b1ed0> >"
] ]
}, },
"execution_count": 8, "execution_count": 8,
@ -1898,7 +1898,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00b6510> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f56404b1b70> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -2130,7 +2130,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa01baea0> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f56404b1f60> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -2340,7 +2340,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa01bad80> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f56404b1ab0> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -2728,7 +2728,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00b6570> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f56404b1c90> >"
] ]
}, },
"execution_count": 10, "execution_count": 10,
@ -2889,7 +2889,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00b6e70> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5640045330> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -3028,7 +3028,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa01baf00> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5640d27930> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -3043,23 +3043,23 @@
"<!-- Generated by graphviz version 2.43.0 (0)\n", "<!-- Generated by graphviz version 2.43.0 (0)\n",
" -->\n", " -->\n",
"<!-- Title: strong Pages: 1 -->\n", "<!-- Title: strong Pages: 1 -->\n",
"<svg width=\"554pt\" height=\"215pt\"\n", "<svg width=\"570pt\" height=\"278pt\"\n",
" viewBox=\"0.00 0.00 554.00 215.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n", " viewBox=\"0.00 0.00 570.00 278.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 211)\">\n", "<g id=\"graph0\" class=\"graph\" transform=\"scale(1.0 1.0) rotate(0) translate(4 274)\">\n",
"<title>strong</title>\n", "<title>strong</title>\n",
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-211 550,-211 550,4 -4,4\"/>\n", "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-274 566,-274 566,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"253\" y=\"-192.8\" font-family=\"Lato\" font-size=\"14.00\">strong</text>\n", "<text text-anchor=\"start\" x=\"261\" y=\"-255.8\" font-family=\"Lato\" font-size=\"14.00\">strong</text>\n",
"<text text-anchor=\"start\" x=\"192.5\" y=\"-178.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n", "<text text-anchor=\"start\" x=\"200.5\" y=\"-241.8\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"213.5\" y=\"-178.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n", "<text text-anchor=\"start\" x=\"221.5\" y=\"-241.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"229.5\" y=\"-178.8\" font-family=\"Lato\" font-size=\"14.00\">) | (Fin(</text>\n", "<text text-anchor=\"start\" x=\"237.5\" y=\"-241.8\" font-family=\"Lato\" font-size=\"14.00\">) | (Fin(</text>\n",
"<text text-anchor=\"start\" x=\"271.5\" y=\"-178.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n", "<text text-anchor=\"start\" x=\"279.5\" y=\"-241.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"287.5\" y=\"-178.8\" font-family=\"Lato\" font-size=\"14.00\">) &amp; Inf(</text>\n", "<text text-anchor=\"start\" x=\"295.5\" y=\"-241.8\" font-family=\"Lato\" font-size=\"14.00\">) &amp; Inf(</text>\n",
"<text text-anchor=\"start\" x=\"329.5\" y=\"-178.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n", "<text text-anchor=\"start\" x=\"337.5\" y=\"-241.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"<text text-anchor=\"start\" x=\"345.5\" y=\"-178.8\" font-family=\"Lato\" font-size=\"14.00\">))</text>\n", "<text text-anchor=\"start\" x=\"353.5\" y=\"-241.8\" font-family=\"Lato\" font-size=\"14.00\">))</text>\n",
"<text text-anchor=\"start\" x=\"216\" y=\"-164.8\" font-family=\"Lato\" font-size=\"14.00\">[parity min even 3]</text>\n", "<text text-anchor=\"start\" x=\"224\" y=\"-227.8\" font-family=\"Lato\" font-size=\"14.00\">[parity min even 3]</text>\n",
"<g id=\"clust1\" class=\"cluster\">\n", "<g id=\"clust1\" class=\"cluster\">\n",
"<title>cluster_0</title>\n", "<title>cluster_0</title>\n",
"<polygon fill=\"none\" stroke=\"green\" points=\"178,-11 178,-149 538,-149 538,-11 178,-11\"/>\n", "<polygon fill=\"none\" stroke=\"green\" points=\"202,-23 202,-212 554,-212 554,-23 202,-23\"/>\n",
"</g>\n", "</g>\n",
"<g id=\"clust2\" class=\"cluster\">\n", "<g id=\"clust2\" class=\"cluster\">\n",
"<title>cluster_1</title>\n", "<title>cluster_1</title>\n",
@ -3078,109 +3078,102 @@
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-34C2.79,-34 17.15,-34 30.63,-34\"/>\n", "<path fill=\"none\" stroke=\"black\" d=\"M1.15,-34C2.79,-34 17.15,-34 30.63,-34\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-34 30.94,-37.15 34.44,-34 30.94,-34 30.94,-34 30.94,-34 34.44,-34 30.94,-30.85 37.94,-34 37.94,-34\"/>\n", "<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-34 30.94,-37.15 34.44,-34 30.94,-34 30.94,-34 30.94,-34 34.44,-34 30.94,-30.85 37.94,-34 37.94,-34\"/>\n",
"</g>\n", "</g>\n",
"<!-- 2 -->\n", "<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n", "<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M234,-119C234,-119 222,-119 222,-119 216,-119 210,-113 210,-107 210,-107 210,-93 210,-93 210,-87 216,-81 222,-81 222,-81 234,-81 234,-81 240,-81 246,-87 246,-93 246,-93 246,-107 246,-107 246,-113 240,-119 234,-119\"/>\n",
"<text text-anchor=\"start\" x=\"223.5\" y=\"-103.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"220\" y=\"-88.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.24,-40.69C104.73,-52.53 168.26,-77.2 203.01,-90.69\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"209.97,-93.39 202.31,-93.79 206.71,-92.12 203.45,-90.86 203.45,-90.86 203.45,-90.86 206.71,-92.12 204.59,-87.92 209.97,-93.39 209.97,-93.39\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-88.8\" font-family=\"Lato\" font-size=\"14.00\">(b &amp; !c) | (!a &amp; !c)</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>2</title>\n", "<title>2</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M210,-106C210,-106 198,-106 198,-106 192,-106 186,-100 186,-94 186,-94 186,-80 186,-80 186,-74 192,-68 198,-68 198,-68 210,-68 210,-68 216,-68 222,-74 222,-80 222,-80 222,-94 222,-94 222,-100 216,-106 210,-106\"/>\n", "<path fill=\"#ffffaa\" stroke=\"black\" d=\"M534,-94C534,-94 522,-94 522,-94 516,-94 510,-88 510,-82 510,-82 510,-68 510,-68 510,-62 516,-56 522,-56 522,-56 534,-56 534,-56 540,-56 546,-62 546,-68 546,-68 546,-82 546,-82 546,-88 540,-94 534,-94\"/>\n",
"<text text-anchor=\"start\" x=\"199.5\" y=\"-90.8\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n", "<text text-anchor=\"start\" x=\"523.5\" y=\"-78.8\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
"<text text-anchor=\"start\" x=\"196\" y=\"-75.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n", "<text text-anchor=\"start\" x=\"520\" y=\"-63.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n", "</g>\n",
"<!-- 0&#45;&gt;2 -->\n", "<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.03,-40.98C79.73,-43.27 86.12,-45.79 92,-48 121.85,-59.21 156.57,-71.25 179.12,-78.94\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"185.99,-81.28 178.35,-82 182.68,-80.15 179.37,-79.02 179.37,-79.02 179.37,-79.02 182.68,-80.15 180.38,-76.04 185.99,-81.28 185.99,-81.28\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-73.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b &amp; !c</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>1</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M372,-57C372,-57 360,-57 360,-57 354,-57 348,-51 348,-45 348,-45 348,-31 348,-31 348,-25 354,-19 360,-19 360,-19 372,-19 372,-19 378,-19 384,-25 384,-31 384,-31 384,-45 384,-45 384,-51 378,-57 372,-57\"/>\n",
"<text text-anchor=\"start\" x=\"361.5\" y=\"-41.8\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
"<text text-anchor=\"start\" x=\"358\" y=\"-26.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge3\" class=\"edge\">\n", "<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n", "<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.44,-34.23C126.43,-34.9 280.44,-36.9 340.57,-37.68\"/>\n", "<path fill=\"none\" stroke=\"black\" d=\"M74.03,-32.18C133.21,-26.42 334.85,-11.48 492,-56 495.82,-57.08 499.7,-58.64 503.4,-60.4\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"347.75,-37.78 340.71,-40.83 344.25,-37.73 340.75,-37.68 340.75,-37.68 340.75,-37.68 344.25,-37.73 340.79,-34.54 347.75,-37.78 347.75,-37.78\"/>\n", "<polygon fill=\"black\" stroke=\"black\" points=\"509.85,-63.73 502.18,-63.31 506.74,-62.12 503.63,-60.52 503.63,-60.52 503.63,-60.52 506.74,-62.12 505.08,-57.72 509.85,-63.73 509.85,-63.73\"/>\n",
"<text text-anchor=\"start\" x=\"174\" y=\"-39.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b &amp; !c</text>\n", "<text text-anchor=\"start\" x=\"264\" y=\"-32.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b &amp; !c</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M74.35,-30.48C97.11,-26.06 138.34,-18.73 174,-16 200.59,-13.97 207.43,-13.78 234,-16 271.6,-19.14 314.65,-27.25 340.82,-32.7\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"347.74,-34.16 340.24,-35.79 344.32,-33.43 340.89,-32.71 340.89,-32.71 340.89,-32.71 344.32,-33.43 341.54,-29.63 347.74,-34.16 347.74,-34.16\"/>\n",
"<text text-anchor=\"start\" x=\"184.5\" y=\"-19.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !c</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M189.44,-106.04C187.43,-115.53 192.28,-124 204,-124 212.61,-124 217.51,-119.43 218.71,-113.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"218.56,-106.04 221.85,-112.97 218.63,-109.54 218.7,-113.04 218.7,-113.04 218.7,-113.04 218.63,-109.54 215.55,-113.1 218.56,-106.04 218.56,-106.04\"/>\n",
"<text text-anchor=\"start\" x=\"186.5\" y=\"-127.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !c</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M222,-77.51C230.76,-72.92 241.73,-67.64 252,-64 281.79,-53.44 317.54,-46.05 340.74,-41.92\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"347.81,-40.69 341.45,-44.99 344.36,-41.29 340.91,-41.89 340.91,-41.89 340.91,-41.89 344.36,-41.29 340.37,-38.79 347.81,-40.69 347.81,-40.69\"/>\n",
"<text text-anchor=\"start\" x=\"264.5\" y=\"-67.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !c</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;2 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>1&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M349.92,-57.22C341.16,-66.83 329.25,-77.56 316,-83 287.99,-94.5 252.59,-93.39 229.39,-90.82\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"222.32,-89.95 229.65,-87.68 225.79,-90.38 229.26,-90.81 229.26,-90.81 229.26,-90.81 225.79,-90.38 228.88,-93.94 222.32,-89.95 222.32,-89.95\"/>\n",
"<text text-anchor=\"start\" x=\"252\" y=\"-95.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b &amp; !c</text>\n",
"</g>\n", "</g>\n",
"<!-- 1&#45;&gt;1 -->\n", "<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge5\" class=\"edge\">\n", "<g id=\"edge4\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n", "<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M351.44,-57.04C349.43,-66.53 354.28,-75 366,-75 374.61,-75 379.51,-70.43 380.71,-64.25\"/>\n", "<path fill=\"none\" stroke=\"black\" d=\"M215.63,-119.04C213.91,-128.53 218.04,-137 228,-137 235.32,-137 239.48,-132.43 240.5,-126.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"380.56,-57.04 383.85,-63.97 380.63,-60.54 380.7,-64.04 380.7,-64.04 380.7,-64.04 380.63,-60.54 377.55,-64.1 380.56,-57.04 380.56,-57.04\"/>\n", "<polygon fill=\"black\" stroke=\"black\" points=\"240.37,-119.04 243.65,-125.98 240.44,-122.54 240.5,-126.04 240.5,-126.04 240.5,-126.04 240.44,-122.54 237.35,-126.09 240.37,-119.04 240.37,-119.04\"/>\n",
"<text text-anchor=\"start\" x=\"346.5\" y=\"-78.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !c</text>\n", "<text text-anchor=\"start\" x=\"208.5\" y=\"-140.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !c</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;2 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M246.05,-92.78C268.48,-83.72 309.36,-68.65 346,-63 401.79,-54.39 468.19,-63.72 502.99,-70.09\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"509.92,-71.4 502.46,-73.19 506.48,-70.75 503.04,-70.1 503.04,-70.1 503.04,-70.1 506.48,-70.75 503.63,-67 509.92,-71.4 509.92,-71.4\"/>\n",
"<text text-anchor=\"start\" x=\"346\" y=\"-66.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b &amp; !c</text>\n",
"</g>\n", "</g>\n",
"<!-- 3 -->\n", "<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n", "<g id=\"node5\" class=\"node\">\n",
"<title>3</title>\n", "<title>3</title>\n",
"<path fill=\"#ffffaa\" stroke=\"black\" d=\"M518,-95C518,-95 506,-95 506,-95 500,-95 494,-89 494,-83 494,-83 494,-69 494,-69 494,-63 500,-57 506,-57 506,-57 518,-57 518,-57 524,-57 530,-63 530,-69 530,-69 530,-83 530,-83 530,-89 524,-95 518,-95\"/>\n", "<path fill=\"#ffffaa\" stroke=\"black\" d=\"M384,-171C384,-171 372,-171 372,-171 366,-171 360,-165 360,-159 360,-159 360,-145 360,-145 360,-139 366,-133 372,-133 372,-133 384,-133 384,-133 390,-133 396,-139 396,-145 396,-145 396,-159 396,-159 396,-165 390,-171 384,-171\"/>\n",
"<text text-anchor=\"start\" x=\"507.5\" y=\"-79.8\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n", "<text text-anchor=\"start\" x=\"373.5\" y=\"-155.8\" font-family=\"Lato\" font-size=\"14.00\">3</text>\n",
"<text text-anchor=\"start\" x=\"504\" y=\"-64.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n", "<text text-anchor=\"start\" x=\"370\" y=\"-140.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n", "</g>\n",
"<!-- 1&#45;&gt;3 -->\n", "<!-- 1&#45;&gt;3 -->\n",
"<g id=\"edge7\" class=\"edge\">\n", "<g id=\"edge6\" class=\"edge\">\n",
"<title>1&#45;&gt;3</title>\n", "<title>1&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M384.1,-34.19C406.31,-30.11 445.82,-25.84 476,-39 482.31,-41.75 488.02,-46.25 492.91,-51.18\"/>\n", "<path fill=\"none\" stroke=\"black\" d=\"M246.23,-102.96C266.32,-106.72 300.29,-114.08 328,-125 336.61,-128.4 345.6,-133 353.5,-137.45\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"497.88,-56.64 490.84,-53.59 495.52,-54.05 493.17,-51.46 493.17,-51.46 493.17,-51.46 495.52,-54.05 495.49,-49.34 497.88,-56.64 497.88,-56.64\"/>\n", "<polygon fill=\"black\" stroke=\"black\" points=\"359.84,-141.12 352.2,-140.34 356.81,-139.37 353.78,-137.62 353.78,-137.62 353.78,-137.62 356.81,-139.37 355.36,-134.89 359.84,-141.12 359.84,-141.12\"/>\n",
"<text text-anchor=\"start\" x=\"416\" y=\"-42.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b &amp; !c</text>\n", "<text text-anchor=\"start\" x=\"266\" y=\"-128.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b &amp; !c</text>\n",
"</g>\n", "</g>\n",
"<!-- 3&#45;&gt;2 -->\n", "<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge11\" class=\"edge\">\n", "<g id=\"edge7\" class=\"edge\">\n",
"<title>3&#45;&gt;2</title>\n", "<title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M493.81,-82.65C451.94,-97.91 341.55,-132.54 252,-111 243.95,-109.06 235.73,-105.51 228.46,-101.71\"/>\n", "<path fill=\"none\" stroke=\"black\" d=\"M509.64,-76.46C459.07,-80.7 311.76,-93.06 253.31,-97.96\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"222.08,-98.2 229.74,-98.82 225.15,-99.89 228.22,-101.58 228.22,-101.58 228.22,-101.58 225.15,-99.89 226.7,-104.34 222.08,-98.2 222.08,-98.2\"/>\n", "<polygon fill=\"black\" stroke=\"black\" points=\"246.31,-98.55 253.02,-94.82 249.8,-98.26 253.29,-97.96 253.29,-97.96 253.29,-97.96 249.8,-98.26 253.55,-101.1 246.31,-98.55 246.31,-98.55\"/>\n",
"<text text-anchor=\"start\" x=\"334\" y=\"-120.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b &amp; !c</text>\n", "<text text-anchor=\"start\" x=\"358.5\" y=\"-92.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !c</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M515.63,-94.04C513.91,-103.53 518.04,-112 528,-112 535.32,-112 539.48,-107.43 540.5,-101.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"540.37,-94.04 543.65,-100.98 540.44,-97.54 540.5,-101.04 540.5,-101.04 540.5,-101.04 540.44,-97.54 537.35,-101.09 540.37,-94.04 540.37,-94.04\"/>\n",
"<text text-anchor=\"start\" x=\"510.5\" y=\"-115.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !c</text>\n",
"</g>\n", "</g>\n",
"<!-- 3&#45;&gt;1 -->\n", "<!-- 3&#45;&gt;1 -->\n",
"<g id=\"edge10\" class=\"edge\">\n", "<g id=\"edge9\" class=\"edge\">\n",
"<title>3&#45;&gt;1</title>\n", "<title>3&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M493.72,-72.48C474.6,-68.47 442.91,-61.49 416,-54 407.82,-51.72 398.96,-48.93 391.06,-46.32\"/>\n", "<path fill=\"none\" stroke=\"black\" d=\"M359.82,-153.9C336.67,-155.67 294.82,-156 264,-140 256.98,-136.35 250.73,-130.66 245.53,-124.71\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"384.12,-44 391.76,-43.24 387.44,-45.11 390.76,-46.22 390.76,-46.22 390.76,-46.22 387.44,-45.11 389.76,-49.21 384.12,-44 384.12,-44\"/>\n", "<polygon fill=\"black\" stroke=\"black\" points=\"241.06,-119.21 247.92,-122.65 243.27,-121.92 245.48,-124.64 245.48,-124.64 245.48,-124.64 243.27,-121.92 243.04,-126.63 241.06,-119.21 241.06,-119.21\"/>\n",
"<text text-anchor=\"start\" x=\"426.5\" y=\"-71.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !c</text>\n", "<text text-anchor=\"start\" x=\"276.5\" y=\"-157.8\" font-family=\"Lato\" font-size=\"14.00\">!a &amp; !c</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;2 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>3&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M396.27,-146.71C419.15,-139.29 460.33,-124.48 492,-105 496.12,-102.46 500.25,-99.45 504.15,-96.33\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"509.68,-91.72 506.32,-98.63 506.99,-93.97 504.3,-96.21 504.3,-96.21 504.3,-96.21 506.99,-93.97 502.28,-93.79 509.68,-91.72 509.68,-91.72\"/>\n",
"<text text-anchor=\"start\" x=\"428\" y=\"-137.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; !b &amp; !c</text>\n",
"</g>\n", "</g>\n",
"<!-- 3&#45;&gt;3 -->\n", "<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge12\" class=\"edge\">\n", "<g id=\"edge11\" class=\"edge\">\n",
"<title>3&#45;&gt;3</title>\n", "<title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M499.99,-95.04C498.33,-104.53 502.33,-113 512,-113 519.1,-113 523.14,-108.43 524.13,-102.25\"/>\n", "<path fill=\"none\" stroke=\"black\" d=\"M363.08,-171.04C361.01,-180.53 365.99,-189 378,-189 386.82,-189 391.85,-184.43 393.08,-178.25\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"524.01,-95.04 527.28,-101.98 524.07,-98.54 524.13,-102.04 524.13,-102.04 524.13,-102.04 524.07,-98.54 520.98,-102.09 524.01,-95.04 524.01,-95.04\"/>\n", "<polygon fill=\"black\" stroke=\"black\" points=\"392.92,-171.04 396.22,-177.97 393,-174.54 393.07,-178.04 393.07,-178.04 393.07,-178.04 393,-174.54 389.92,-178.1 392.92,-171.04 392.92,-171.04\"/>\n",
"<text text-anchor=\"start\" x=\"482\" y=\"-116.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b &amp; !c</text>\n", "<text text-anchor=\"start\" x=\"348\" y=\"-192.8\" font-family=\"Lato\" font-size=\"14.00\">a &amp; b &amp; !c</text>\n",
"</g>\n", "</g>\n",
"</g>\n", "</g>\n",
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00b6a20> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f56400456f0> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -3533,7 +3526,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00b6120> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5640045450> >"
] ]
}, },
"execution_count": 12, "execution_count": 12,
@ -3876,7 +3869,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00c01b0> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5640045540> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -4053,7 +4046,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00b6f60> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5640d3abd0> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -4211,7 +4204,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa029e660> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5640d3a8a0> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -4560,7 +4553,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00c0a80> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5640d3ae10> >"
] ]
}, },
"execution_count": 14, "execution_count": 14,
@ -4683,7 +4676,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00c0540> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5640045930> >"
] ]
}, },
"execution_count": 15, "execution_count": 15,
@ -4781,7 +4774,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00c8090> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f56400452a0> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -4857,7 +4850,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00c0270> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5640d3a930> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -4951,7 +4944,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00c8090> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5640045090> >"
] ]
}, },
"execution_count": 18, "execution_count": 18,
@ -5101,7 +5094,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00c8a50> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5640045b70> >"
] ]
}, },
"execution_count": 19, "execution_count": 19,
@ -5261,7 +5254,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00d0cc0> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5640052300> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -5363,7 +5356,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00b6780> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5640d34a80> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -5498,7 +5491,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00c0570> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5640052360> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -5702,7 +5695,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00c85d0> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5640045f00> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -5843,7 +5836,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00c8cf0> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5640d34ae0> >"
] ]
}, },
"execution_count": 21, "execution_count": 21,
@ -5946,7 +5939,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f1aa00c8b10> >" "<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5640045e40> >"
] ]
}, },
"execution_count": 22, "execution_count": 22,
@ -5957,6 +5950,13 @@
"source": [ "source": [
"spot.decompose_scc(si, 'a2')" "spot.decompose_scc(si, 'a2')"
] ]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
} }
], ],
"metadata": { "metadata": {

View file

@ -649,3 +649,41 @@ State: 7
[0&1] 5 [0&1] 5
[1] 7 [1] 7
--END--''' --END--'''
# issue #452
aut = spot.automaton("""HOA: v1
States: 9
Start: 0
AP: 4 "p0" "p1" "p2" "p3"
Acceptance: 2 Fin(0)&Fin(1)
Alias: @p 0&1&!2&3
--BODY--
State: 0
[@p] 1 {0 1}
State: 1
[@p] 2 {0 1}
State: 2
[@p] 0 {0 1}
[@p] 2
[@p] 3 {0}
[@p] 4 {1}
State: 3
[@p] 5 {0 1}
[@p] 6 {0}
State: 4
[@p] 7 {0 1}
[@p] 8 {1}
State: 5
[@p] 8 {0 1}
State: 6
[@p] 2 {0}
[@p] 4 {0 1}
State: 7
[@p] 6 {0 1}
State: 8
[@p] 2 {1}
[@p] 3 {0 1}
--END--""")
aut = spot.simulation(aut)
assert aut.num_states() == 1