Commit 8df5f513 authored by Alexandre Duret-Lutz's avatar Alexandre Duret-Lutz

gfguarantee: fix #357 again

The previous patch triggered this issue again, failing
core/ltl2tgba2.test.

* spot/twaalgos/gfguarantee.cc: Separate the replaying of history from
the modification of the automaton.
* NEWS: Mention the bug.
* tests/python/twagraph-internals.ipynb, tests/python/automata.ipynb:
Adjust.
parent da5d23f0
......@@ -132,6 +132,12 @@ New in spot 2.7.5.dev (not yet released)
properties. This can be altered with the SPOT_PR_CHECK
environment variable.
Bugs fixed:
- The gf_guarantee_to_ba() is relying on an inplace algorithm that
could produce a different number of edges for the same input in
two different transition order.
New in spot 2.7.5 (2019-06-05)
Build:
......
......@@ -185,13 +185,92 @@ namespace spot
// }
}
unsigned nedges = aut->num_edges();
unsigned new_init = -1U;
// The loop might add new edges, but we just want to iterate
// on the initial ones.
for (unsigned edge = 1; edge <= nedges; ++edge)
// We do two the rewrite in two passes. The first one
// replays histories to detect the new source the edges
// should synchronize with. We used to have single
// loop, but replaying history on edges that have been modified
// result in different automaton depending on the edge order.
std::vector<unsigned> redirect_src;
if (is_det)
{
redirect_src.resize(aut->edge_vector().size());
for (auto& e: aut->edges())
{
unsigned edge = aut->edge_number(e);
redirect_src[edge] = e.src; // no change by default
// Don't bother with terminal states, they won't be
// reachable anymore.
if (term[si.scc_of(e.src)])
continue;
// It will not loop
if (!term[si.scc_of(e.dst)])
continue;
// It will loop.
// If initial state cannot be reached from another
// state of the automaton, we can get rid of it by
// combining the edge reaching the terminal state
// with the edges leaving the initial state.
//
// However if we have some histories for e.src
// (which implies that the automaton is
// deterministic), we can try to replay that from
// the initial state first.
//
// One problem with those histories, is that we do
// not know how much of it to replay. It's possible
// that we cannot find a matching transition (e.g. if
// the history if "b" but the choices are "!a" or "a"),
// and its also possible to that playing too much of
// history will get us back the terminal state. In both
// cases, we should try again with a smaller history.
unsigned moved_init = init;
bdd econd = e.cond;
auto& h = histories[e.src];
int hsize = h.size();
for (int hlen = hsize - 1; hlen >= 0; --hlen)
{
for (int pos = hlen - 1; pos >= 0; --pos)
{
for (auto& e: aut->out(moved_init))
if (bdd_implies(h[pos], e.cond))
{
if (term[si.scc_of(e.dst)])
goto failed;
moved_init = e.dst;
goto moved;
}
// if we reach this place, we failed to follow
// one step of the history.
goto failed;
moved:
continue;
}
// Make sure no successor of the new initial
// state will reach a terminal state; if
// that is the case, we have to shorten the
// history further.
if (hlen > 0)
for (auto& ei: aut->out(moved_init))
if ((ei.cond & econd) != bddfalse
&& term[si.scc_of(ei.dst)])
goto failed;
redirect_src[edge] = moved_init;
break;
failed:
moved_init = init;
continue;
}
}
}
// No we do the redirection.
for (auto& e: aut->edges())
{
auto& e = aut->edge_storage(edge);
// Don't bother with terminal states, they won't be
// reachable anymore.
if (term[si.scc_of(e.src)])
......@@ -235,95 +314,55 @@ namespace spot
bool first;
if (is_det)
{
auto& h = histories[e.src];
int hsize = h.size();
for (int hlen = hsize - 1; hlen >= 0; --hlen)
{
for (int pos = hlen - 1; pos >= 0; --pos)
{
for (auto& e: aut->out(moved_init))
if (bdd_implies(h[pos], e.cond))
{
if (term[si.scc_of(e.dst)])
goto failed;
moved_init = e.dst;
goto moved;
}
// if we reach this place, we failed to follow
// one step of the history.
goto failed;
moved:
continue;
}
// Make sure no successor of the new initial
// state will reach a terminal state; if
// that is the case, we have to shorten the
// history further.
if (hlen > 0)
for (auto& ei: aut->out(moved_init))
if ((ei.cond & econd) != bddfalse
&& term[si.scc_of(ei.dst)])
goto failed;
unsigned edge = aut->edge_number(e);
moved_init = redirect_src[edge];
// we have successfully played all history
// to a non-terminal state.
//
// Combine this edge with any compatible
// edge from the initial state.
first = true;
for (auto& ei: aut->out(moved_init))
first = true;
for (auto& ei: aut->out(moved_init))
{
bdd cond = ei.cond & econd;
if (cond != bddfalse)
{
bdd cond = ei.cond & econd;
if (cond != bddfalse)
// We should never reach the terminal state,
// unless the history is empty. In that
// case (ts=true) we have to make a loop to
// the initial state without any
// combination.
bool ts = term[si.scc_of(ei.dst)];
if (ts)
{
// We should never reach the terminal state,
// unless the history is empty. In that
// case (ts=true) we have to make a loop to
// the initial state without any
// combination.
bool ts = term[si.scc_of(ei.dst)];
if (ts)
want_merge_edges = true;
}
if (first)
{
e.acc = {0};
e.cond = cond;
first = false;
if (!ts)
{
assert(hlen == 0);
want_merge_edges = true;
e.dst = ei.dst;
if (new_init == -1U)
new_init = e.src;
}
if (first)
else
{
e.acc = {0};
e.cond = cond;
first = false;
if (!ts)
{
e.dst = ei.dst;
if (new_init == -1U)
new_init = e.src;
}
else
{
new_init = e.dst = init;
}
new_init = e.dst = init;
}
}
else
{
if (ts)
{
aut->new_edge(e.src, init, cond, {0});
new_init = init;
}
else
{
if (ts)
{
aut->new_edge(e.src, init, cond, {0});
new_init = init;
}
else
{
aut->new_edge(e.src, ei.dst,
cond, {0});
}
aut->new_edge(e.src, ei.dst,
cond, {0});
}
}
}
break;
failed:
moved_init = init;
continue;
}
}
else
......
......@@ -178,7 +178,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5a6034a960> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fb70857f7e0> >"
]
},
"execution_count": 2,
......@@ -643,7 +643,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5a60301210> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fb708536540> >"
]
},
"execution_count": 6,
......@@ -719,7 +719,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5a60301bd0> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fb708536c90> >"
]
},
"execution_count": 7,
......@@ -802,7 +802,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5a60301690> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fb7085369f0> >"
]
},
"execution_count": 8,
......@@ -1321,7 +1321,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5a603010c0> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fb708536a20> >"
]
},
"execution_count": 12,
......@@ -1435,7 +1435,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5a60301090> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fb7085362a0> >"
]
},
"execution_count": 13,
......@@ -1566,7 +1566,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5a60301c90> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fb70857f8a0> >"
]
},
"execution_count": 14,
......@@ -1785,7 +1785,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5a6030f4b0> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fb708544600> >"
]
},
"metadata": {},
......@@ -1935,7 +1935,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5a60392630> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fb708544390> >"
]
},
"metadata": {},
......@@ -2107,7 +2107,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5a6030f930> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fb708544900> >"
]
},
"metadata": {},
......@@ -2282,7 +2282,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5a6030f870> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fb7085449c0> >"
]
},
"metadata": {},
......@@ -2468,7 +2468,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5a6030fbd0> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fb708544b10> >"
]
},
"execution_count": 19,
......@@ -2544,7 +2544,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f5a6030f150> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fb708544c00> >"
]
},
"execution_count": 20,
......@@ -2616,7 +2616,7 @@
"<title>0-&gt;0</title>\n",
"<path d=\"M49.6208,-37.4339C48.3189,-47.2545 50.4453,-56.3966 56,-56.3966 60.166,-56.3966 62.4036,-51.2542 62.7128,-44.5399\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"62.3792,-37.4339 65.8541,-44.2785 62.5434,-40.9301 62.7076,-44.4262 62.7076,-44.4262 62.7076,-44.4262 62.5434,-40.9301 59.561,-44.574 62.3792,-37.4339 62.3792,-37.4339\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"50.5\" y=\"-75.1966\">!a</text>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"52.5\" y=\"-75.1966\">a</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"48\" y=\"-60.1966\">⓿</text>\n",
"</g>\n",
"<!-- 1 -->\n",
......@@ -2630,21 +2630,21 @@
"<title>0-&gt;1</title>\n",
"<path d=\"M74.0098,-20.3966C85.5679,-20.3966 100.7507,-20.3966 113.5345,-20.3966\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"120.7388,-20.3966 113.7388,-23.5467 117.2388,-20.3967 113.7388,-20.3967 113.7388,-20.3967 113.7388,-20.3967 117.2388,-20.3967 113.7387,-17.2467 120.7388,-20.3966 120.7388,-20.3966\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"94\" y=\"-24.1966\">a</text>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"92\" y=\"-24.1966\">!a</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;0 -->\n",
"<g class=\"edge\" id=\"edge4\">\n",
"<title>1-&gt;0</title>\n",
"<path d=\"M124.5385,-9.3757C115.4203,-3.7422 103.2768,1.3966 92,-1.3966 87.1146,-2.6067 82.1612,-4.614 77.5558,-6.8813\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"71.1057,-10.3266 75.7959,-4.25 74.1929,-8.6776 77.2801,-7.0285 77.2801,-7.0285 77.2801,-7.0285 74.1929,-8.6776 78.7642,-9.807 71.1057,-10.3266 71.1057,-10.3266\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"92\" y=\"-5.1966\">!a</text>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"94\" y=\"-5.1966\">a</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g class=\"edge\" id=\"edge5\">\n",
"<title>1-&gt;1</title>\n",
"<path d=\"M131.9688,-37.0607C130.4063,-47.0216 132.75,-56.3966 139,-56.3966 143.6875,-56.3966 146.1777,-51.1232 146.4707,-44.2842\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"146.0313,-37.0607 149.6006,-43.8564 146.2438,-40.5542 146.4564,-44.0478 146.4564,-44.0478 146.4564,-44.0478 146.2438,-40.5542 143.3122,-44.2391 146.0313,-37.0607 146.0313,-37.0607\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"135.5\" y=\"-75.1966\">a</text>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"133.5\" y=\"-75.1966\">!a</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"131\" y=\"-60.1966\">⓿</text>\n",
"</g>\n",
"</g>\n",
......@@ -2716,316 +2716,257 @@
{
"data": {
"text/html": [
"<div style='vertical-align:text-top;display:inline-block;width:50%;'><svg height=\"279pt\" viewBox=\"0.00 0.00 484.00 279.06\" width=\"484pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g class=\"graph\" id=\"graph0\" transform=\"scale(1 1) rotate(0) translate(4 275.0638)\">\n",
"<polygon fill=\"#ffffff\" points=\"-4,4 -4,-275.0638 480,-275.0638 480,4 -4,4\" stroke=\"transparent\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"191\" y=\"-256.8638\">Inf(</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"213\" y=\"-256.8638\">⓿</text>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"229\" y=\"-256.8638\">)&amp;Inf(</text>\n",
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"265\" y=\"-256.8638\">❶</text>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"281\" y=\"-256.8638\">)</text>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"194\" y=\"-242.8638\">[gen. Büchi 2]</text>\n",
"<div style='vertical-align:text-top;display:inline-block;width:50%;'><svg height=\"244pt\" viewBox=\"0.00 0.00 354.00 244.00\" width=\"354pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g class=\"graph\" id=\"graph0\" transform=\"scale(1 1) rotate(0) translate(4 240)\">\n",
"<polygon fill=\"#ffffff\" points=\"-4,4 -4,-240 350,-240 350,4 -4,4\" stroke=\"transparent\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"126\" y=\"-221.8\">Inf(</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"148\" y=\"-221.8\">⓿</text>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"164\" y=\"-221.8\">)&amp;Inf(</text>\n",
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"200\" y=\"-221.8\">❶</text>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"216\" y=\"-221.8\">)</text>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"129\" y=\"-207.8\">[gen. Büchi 2]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g class=\"node\" id=\"node2\">\n",
"<title>0</title>\n",
"<ellipse cx=\"65\" cy=\"-29.0638\" fill=\"#ffffaa\" rx=\"27\" ry=\"18\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"55\" y=\"-25.3638\">0,0</text>\n",
"<ellipse cx=\"65\" cy=\"-18\" fill=\"#ffffaa\" rx=\"27\" ry=\"18\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"55\" y=\"-14.3\">0,0</text>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g class=\"edge\" id=\"edge1\">\n",
"<title>I-&gt;0</title>\n",
"<path d=\"M1.2244,-29.0638C4.383,-29.0638 17.3969,-29.0638 30.8528,-29.0638\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"37.8798,-29.0638 30.8799,-32.2139 34.3798,-29.0638 30.8798,-29.0639 30.8798,-29.0639 30.8798,-29.0639 34.3798,-29.0638 30.8798,-25.9139 37.8798,-29.0638 37.8798,-29.0638\" stroke=\"#000000\"/>\n",
"<path d=\"M1.2244,-18C4.383,-18 17.3969,-18 30.8528,-18\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"37.8798,-18 30.8799,-21.1501 34.3798,-18 30.8798,-18.0001 30.8798,-18.0001 30.8798,-18.0001 34.3798,-18 30.8798,-14.8501 37.8798,-18 37.8798,-18\" stroke=\"#000000\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g class=\"edge\" id=\"edge2\">\n",
"<title>0-&gt;0</title>\n",
"<path d=\"M57.1448,-35.4099C55.6785,-45.0879 58.2969,-54 65,-54 69.9226,-54 72.6423,-49.1936 73.1591,-42.8073\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"72.8552,-35.4099 76.2899,-42.2747 72.9989,-38.9069 73.1426,-42.404 73.1426,-42.404 73.1426,-42.404 72.9989,-38.9069 69.9953,-42.5333 72.8552,-35.4099 72.8552,-35.4099\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"46.5\" y=\"-72.8\">a &amp; !b</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"57\" y=\"-57.8\">⓿</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g class=\"node\" id=\"node3\">\n",
"<title>1</title>\n",
"<ellipse cx=\"319\" cy=\"-123.0638\" fill=\"#ffffaa\" rx=\"27\" ry=\"18\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"309\" y=\"-119.3638\">0,1</text>\n",
"<ellipse cx=\"189\" cy=\"-88\" fill=\"#ffffaa\" rx=\"27\" ry=\"18\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"179\" y=\"-84.3\">0,1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g class=\"edge\" id=\"edge2\">\n",
"<g class=\"edge\" id=\"edge3\">\n",
"<title>0-&gt;1</title>\n",
"<path d=\"M80.0121,-44.4121C98.2989,-62.0597 130.9836,-90.3536 165,-104.0638 203.8607,-119.7263 252.3451,-123.3706 284.4157,-123.8186\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"291.799,-123.8693 284.7775,-126.9711 288.2991,-123.8452 284.7992,-123.8212 284.7992,-123.8212 284.7992,-123.8212 288.2991,-123.8452 284.8208,-120.6712 291.799,-123.8693 291.799,-123.8693\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"173.5\" y=\"-136.8638\">!a &amp; b</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"184\" y=\"-121.8638\">⓿</text>\n",
"<path d=\"M85.7548,-29.7164C106.6774,-41.5276 139.0687,-59.813 161.9831,-72.7485\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"168.1775,-76.2453 160.5331,-75.5472 165.1296,-74.5247 162.0817,-72.8041 162.0817,-72.8041 162.0817,-72.8041 165.1296,-74.5247 163.6302,-70.061 168.1775,-76.2453 168.1775,-76.2453\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"110\" y=\"-79.8\">a &amp; b</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"119\" y=\"-64.8\">⓿</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g class=\"node\" id=\"node4\">\n",
"<title>2</title>\n",
"<ellipse cx=\"192\" cy=\"-29.0638\" fill=\"#ffffaa\" rx=\"27\" ry=\"18\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"182\" y=\"-25.3638\">1,0</text>\n",
"<ellipse cx=\"319\" cy=\"-88\" fill=\"#ffffaa\" rx=\"27\" ry=\"18\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"309\" y=\"-84.3\">1,1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g class=\"edge\" id=\"edge3\">\n",
"<title>0-&gt;2</title>\n",
"<path d=\"M92.2447,-29.0638C111.4127,-29.0638 137.2089,-29.0638 157.7667,-29.0638\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"164.8004,-29.0638 157.8004,-32.2139 161.3004,-29.0638 157.8004,-29.0639 157.8004,-29.0639 157.8004,-29.0639 161.3004,-29.0638 157.8003,-25.9139 164.8004,-29.0638 164.8004,-29.0638\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"110\" y=\"-32.8638\">a &amp; !b</text>\n",
"</g>\n",
"<!-- 3 -->\n",
"<g class=\"node\" id=\"node5\">\n",
"<title>3</title>\n",
"<ellipse cx=\"449\" cy=\"-88.0638\" fill=\"#ffffaa\" rx=\"27\" ry=\"18\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"439\" y=\"-84.3638\">1,1</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;3 -->\n",
"<g class=\"edge\" id=\"edge4\">\n",
"<title>0-&gt;3</title>\n",
"<path d=\"M89.2895,-20.5704C109.3161,-14.0403 138.6165,-5.5629 165,-2.0638 188.7917,1.0916 195.0789,-.1195 219,-2.0638 302.9404,-8.8862 330.6391,-1.7029 404,-43.0638 414.322,-48.8833 423.8935,-57.7249 431.5317,-66.035\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"436.4962,-71.6595 429.5023,-68.4959 434.1801,-69.0355 431.8639,-66.4114 431.8639,-66.4114 431.8639,-66.4114 434.1801,-69.0355 434.2256,-64.3269 436.4962,-71.6595 436.4962,-71.6595\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"238.5\" y=\"-9.8638\">a &amp; b</text>\n",
"<title>0-&gt;2</title>\n",
"<path d=\"M92.0179,-15.3093C133.4782,-12.3841 214.2574,-11.5218 274,-41 285.4096,-46.6297 295.4898,-56.4027 303.202,-65.5838\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"307.6886,-71.1815 300.8527,-67.6895 305.4996,-68.4504 303.3106,-65.7194 303.3106,-65.7194 303.3106,-65.7194 305.4996,-68.4504 305.7686,-63.7493 307.6886,-71.1815 307.6886,-71.1815\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"170.5\" y=\"-25.8\">!a &amp; b</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g class=\"edge\" id=\"edge5\">\n",
"<title>1-&gt;1</title>\n",
"<path d=\"M313.4273,-140.8455C312.4803,-150.3787 314.3379,-159.0638 319,-159.0638 322.4237,-159.0638 324.335,-154.3798 324.7337,-148.1159\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"324.5727,-140.8455 327.877,-147.774 324.6502,-144.3446 324.7277,-147.8438 324.7277,-147.8438 324.7277,-147.8438 324.6502,-144.3446 321.5785,-147.9135 324.5727,-140.8455 324.5727,-140.8455\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"299\" y=\"-177.8638\">!a &amp; !c</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"311\" y=\"-162.8638\">⓿</text>\n",
"<path d=\"M183.4273,-105.7817C182.4803,-115.3149 184.3379,-124 189,-124 192.4237,-124 194.335,-119.3161 194.7337,-113.0521\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"194.5727,-105.7817 197.877,-112.7102 194.6502,-109.2809 194.7277,-112.78 194.7277,-112.78 194.7277,-112.78 194.6502,-109.2809 191.5785,-112.8498 194.5727,-105.7817 194.5727,-105.7817\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"171\" y=\"-142.8\">a &amp; !c</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"181\" y=\"-127.8\">⓿</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g class=\"edge\" id=\"edge6\">\n",
"<title>1-&gt;1</title>\n",
"<path d=\"M310.4657,-140.3128C304.4091,-161.4983 307.2539,-189.0638 319,-189.0638 329.5072,-189.0638 332.8918,-167.0063 329.1536,-147.1891\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"327.5343,-140.3128 332.205,-146.4043 328.3366,-143.7196 329.1389,-147.1264 329.1389,-147.1264 329.1389,-147.1264 328.3366,-143.7196 326.0727,-147.8485 327.5343,-140.3128 327.5343,-140.3128\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"301\" y=\"-206.8638\">!a &amp; c</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"303\" y=\"-192.8638\">⓿</text>\n",
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"319\" y=\"-192.8638\">❶</text>\n",
"<path d=\"M180.4657,-105.249C174.4091,-126.4346 177.2539,-154 189,-154 199.5072,-154 202.8918,-131.9425 199.1536,-112.1253\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"197.5343,-105.249 202.205,-111.3406 198.3366,-108.6558 199.1389,-112.0627 199.1389,-112.0627 199.1389,-112.0627 198.3366,-108.6558 196.0727,-112.7847 197.5343,-105.249 197.5343,-105.249\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"173\" y=\"-171.8\">a &amp; c</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"173\" y=\"-157.8\">⓿</text>\n",
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"189\" y=\"-157.8\">❶</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;3 -->\n",
"<!-- 1&#45;&gt;2 -->\n",
"<g class=\"edge\" id=\"edge7\">\n",
"<title>1-&gt;3</title>\n",
"<path d=\"M326.4052,-140.6219C333.6277,-155.2329 346.144,-175.0472 364,-184.0638 379.8693,-192.0771 388.9968,-193.6007 404,-184.0638 428.3898,-168.5601 439.7893,-135.9631 444.9584,-113.0715\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"446.4264,-106.0142 448.0848,-113.509 445.7136,-109.4409 445.0008,-112.8675 445.0008,-112.8675 445.0008,-112.8675 445.7136,-109.4409 441.9168,-112.226 446.4264,-106.0142 446.4264,-106.0142\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"366\" y=\"-193.8638\">a &amp; !c</text>\n",
"<title>1-&gt;2</title>\n",
"<path d=\"M194.9997,-105.8615C201.6466,-122.4762 214.1313,-146.2372 234,-157 249.6317,-165.4676 258.3683,-165.4676 274,-157 291.3851,-147.5825 303.1168,-128.2133 310.231,-112.3876\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"313.0003,-105.8615 313.1656,-113.5358 311.6331,-109.0834 310.2659,-112.3053 310.2659,-112.3053 310.2659,-112.3053 311.6331,-109.0834 307.3662,-111.0748 313.0003,-105.8615 313.0003,-105.8615\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"234\" y=\"-166.8\">!a &amp; !c</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;3 -->\n",
"<!-- 1&#45;&gt;2 -->\n",
"<g class=\"edge\" id=\"edge8\">\n",
"<title>1-&gt;3</title>\n",
"<path d=\"M343.3042,-131.1652C360.7865,-135.6248 384.602,-138.8417 404,-131.0638 414.9197,-126.6853 424.6906,-118.2535 432.3148,-110.0081\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"437.2378,-104.3815 434.999,-111.724 434.9331,-107.0156 432.6283,-109.6497 432.6283,-109.6497 432.6283,-109.6497 434.9331,-107.0156 430.2577,-107.5754 437.2378,-104.3815 437.2378,-104.3815\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"368\" y=\"-153.8638\">a &amp; c</text>\n",
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"376\" y=\"-138.8638\">❶</text>\n",
"<title>1-&gt;2</title>\n",
"<path d=\"M211.9489,-97.8578C218.9011,-100.3774 226.6461,-102.7315 234,-104 251.5191,-107.0218 256.4809,-107.0218 274,-104 279.0558,-103.1279 284.2965,-101.7427 289.3373,-100.1434\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"296.0511,-97.8578 290.4397,-103.0957 292.7378,-98.9858 289.4246,-100.1137 289.4246,-100.1137 289.4246,-100.1137 292.7378,-98.9858 288.4094,-97.1318 296.0511,-97.8578 296.0511,-97.8578\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"236\" y=\"-124.8\">!a &amp; c</text>\n",
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"246\" y=\"-109.8\">❶</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g class=\"edge\" id=\"edge9\">\n",
"<title>2-&gt;1</title>\n",
"<path d=\"M210.196,-42.5317C232.5468,-59.0748 270.5227,-87.1829 295.1794,-105.4327\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"300.8378,-109.6208 293.3372,-107.9882 298.0245,-107.5386 295.2113,-105.4563 295.2113,-105.4563 295.2113,-105.4563 298.0245,-107.5386 297.0853,-102.9244 300.8378,-109.6208 300.8378,-109.6208\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"237\" y=\"-90.8638\">!a &amp; b</text>\n",
"<path d=\"M291.8871,-85.8995C285.994,-85.5248 279.7909,-85.1928 274,-85 256.2321,-84.4084 251.7679,-84.4084 234,-85 230.4712,-85.1175 226.7893,-85.2867 223.1178,-85.4857\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"216.1129,-85.8995 222.9149,-82.3421 219.6068,-85.693 223.1007,-85.4866 223.1007,-85.4866 223.1007,-85.4866 219.6068,-85.693 223.2865,-88.6311 216.1129,-85.8995 216.1129,-85.8995\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"236\" y=\"-88.8\">a &amp; !c</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g class=\"edge\" id=\"edge10\">\n",
"<title>2-&gt;2</title>\n",
"<path d=\"M181.1016,-45.7278C178.6797,-55.6888 182.3125,-65.0638 192,-65.0638 199.2656,-65.0638 203.1255,-59.7903 203.5796,-52.9513\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"202.8984,-45.7278 206.6918,-52.4011 203.2271,-49.2124 203.5557,-52.6969 203.5557,-52.6969 203.5557,-52.6969 203.2271,-49.2124 200.4196,-52.9927 202.8984,-45.7278 202.8984,-45.7278\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"173.5\" y=\"-83.8638\">a &amp; !b</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"184\" y=\"-68.8638\">⓿</text>\n",
"<title>2-&gt;1</title>\n",
"<path d=\"M305.3336,-71.9784C297.1903,-63.7001 286.1001,-54.4255 274,-50 257.3039,-43.8935 250.6961,-43.8935 234,-50 224.3577,-53.5266 215.3568,-60.1324 207.9773,-66.8595\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"202.6664,-71.9784 205.5204,-64.8525 205.1864,-69.5495 207.7064,-67.1205 207.7064,-67.1205 207.7064,-67.1205 205.1864,-69.5495 209.8925,-69.3885 202.6664,-71.9784 202.6664,-71.9784\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"238\" y=\"-68.8\">a &amp; c</text>\n",
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"246\" y=\"-53.8\">❶</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;3 -->\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g class=\"edge\" id=\"edge11\">\n",
"<title>2-&gt;3</title>\n",
"<path d=\"M219.0517,-28.9307C260.2943,-29.5646 340.7713,-34.1216 404,-58.0638 411.5297,-60.915 419.0641,-65.222 425.7551,-69.6898\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"431.6385,-73.8008 424.0963,-72.3735 428.7695,-71.7961 425.9005,-69.7914 425.9005,-69.7914 425.9005,-69.7914 428.7695,-71.7961 427.7048,-67.2093 431.6385,-73.8008 431.6385,-73.8008\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"302\" y=\"-60.8638\">a &amp; b</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"311\" y=\"-45.8638\">⓿</text>\n",
"<title>2-&gt;2</title>\n",
"<path d=\"M313.2476,-105.7817C312.27,-115.3149 314.1875,-124 319,-124 322.5342,-124 324.5071,-119.3161 324.9186,-113.0521\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"324.7524,-105.7817 328.0617,-112.7079 324.8325,-109.2808 324.9125,-112.7799 324.9125,-112.7799 324.9125,-112.7799 324.8325,-109.2808 321.7633,-112.8519 324.7524,-105.7817 324.7524,-105.7817\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"299\" y=\"-142.8\">!a &amp; !c</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"311\" y=\"-127.8\">⓿</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;1 -->\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g class=\"edge\" id=\"edge12\">\n",
"<title>3-&gt;1</title>\n",
"<path d=\"M423.5681,-94.9108C402.8262,-100.4952 373.4072,-108.4157 351.0544,-114.4337\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"344.0653,-116.3154 350.0057,-111.4538 347.445,-115.4055 350.8246,-114.4955 350.8246,-114.4955 350.8246,-114.4955 347.445,-115.4055 351.6436,-117.5372 344.0653,-116.3154 344.0653,-116.3154\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"364\" y=\"-113.8638\">!a &amp; !c</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;1 -->\n",
"<g class=\"edge\" id=\"edge13\">\n",
"<title>3-&gt;1</title>\n",
"<path d=\"M429.332,-75.4937C411.5934,-65.8674 385.1248,-55.8266 364,-66.0638 349.6039,-73.0401 338.4238,-87.1034 330.8082,-99.5147\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"327.1525,-105.8081 327.9447,-98.173 328.9105,-102.7816 330.6685,-99.7552 330.6685,-99.7552 330.6685,-99.7552 328.9105,-102.7816 333.3923,-101.3374 327.1525,-105.8081 327.1525,-105.8081\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"366\" y=\"-84.8638\">!a &amp; c</text>\n",
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"376\" y=\"-69.8638\">❶</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g class=\"edge\" id=\"edge14\">\n",
"<title>3-&gt;3</title>\n",
"<path d=\"M443.2476,-105.8455C442.27,-115.3787 444.1875,-124.0638 449,-124.0638 452.5342,-124.0638 454.5071,-119.3798 454.9186,-113.1159\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"454.7524,-105.8455 458.0617,-112.7716 454.8325,-109.3446 454.9125,-112.8437 454.9125,-112.8437 454.9125,-112.8437 454.8325,-109.3446 451.7633,-112.9157 454.7524,-105.8455 454.7524,-105.8455\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"431\" y=\"-142.8638\">a &amp; !c</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"441\" y=\"-127.8638\">⓿</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g class=\"edge\" id=\"edge15\">\n",
"<title>3-&gt;3</title>\n",
"<path d=\"M440.1904,-105.3128C433.9385,-126.4983 436.875,-154.0638 449,-154.0638 459.8462,-154.0638 463.3399,-132.0063 459.4811,-112.1891\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"457.8096,-105.3128 462.524,-111.3706 458.6363,-108.7137 459.4631,-112.1147 459.4631,-112.1147 459.4631,-112.1147 458.6363,-108.7137 456.4022,-112.8588 457.8096,-105.3128 457.8096,-105.3128\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"433\" y=\"-171.8638\">a &amp; c</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"433\" y=\"-157.8638\">⓿</text>\n",
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"449\" y=\"-157.8638\">❶</text>\n",
"</g>\n",
"</g>\n",
"</svg></div><div style='vertical-align:text-top;display:inline-block;width:50%;'><svg height=\"278pt\" viewBox=\"0.00 0.00 413.00 278.48\" width=\"413pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g class=\"graph\" id=\"graph0\" transform=\"scale(1 1) rotate(0) translate(4 274.4783)\">\n",
"<polygon fill=\"#ffffff\" points=\"-4,4 -4,-274.4783 409,-274.4783 409,4 -4,4\" stroke=\"transparent\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"155.5\" y=\"-256.2783\">Inf(</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"177.5\" y=\"-256.2783\">⓿</text>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"193.5\" y=\"-256.2783\">)&amp;Inf(</text>\n",
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"229.5\" y=\"-256.2783\">❶</text>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"245.5\" y=\"-256.2783\">)</text>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"158.5\" y=\"-242.2783\">[gen. Büchi 2]</text>\n",
"<title>2-&gt;2</title>\n",
"<path d=\"M310.1904,-105.249C303.9385,-126.4346 306.875,-154 319,-154 329.8462,-154 333.3399,-131.9425 329.4811,-112.1253\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"327.8096,-105.249 332.524,-111.3069 328.6363,-108.65 329.4631,-112.051 329.4631,-112.051 329.4631,-112.051 328.6363,-108.65 326.4022,-112.795 327.8096,-105.249 327.8096,-105.249\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"301\" y=\"-171.8\">!a &amp; c</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"303\" y=\"-157.8\">⓿</text>\n",
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"319\" y=\"-157.8\">❶</text>\n",
"</g>\n",
"</g>\n",
"</svg></div><div style='vertical-align:text-top;display:inline-block;width:50%;'><svg height=\"244pt\" viewBox=\"0.00 0.00 303.00 244.00\" width=\"303pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g class=\"graph\" id=\"graph0\" transform=\"scale(1 1) rotate(0) translate(4 240)\">\n",
"<polygon fill=\"#ffffff\" points=\"-4,4 -4,-240 299,-240 299,4 -4,4\" stroke=\"transparent\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"100.5\" y=\"-221.8\">Inf(</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"122.5\" y=\"-221.8\">⓿</text>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"138.5\" y=\"-221.8\">)&amp;Inf(</text>\n",
"<text fill=\"#ff4da0\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"174.5\" y=\"-221.8\">❶</text>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"190.5\" y=\"-221.8\">)</text>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"103.5\" y=\"-207.8\">[gen. Büchi 2]</text>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g class=\"node\" id=\"node2\">\n",
"<title>0</title>\n",
"<g id=\"a_node2\"><a xlink:title=\"0,0\">\n",
"<ellipse cx=\"56\" cy=\"-28.4783\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"56\" y=\"-24.7783\">0</text>\n",
"<ellipse cx=\"56\" cy=\"-18\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"56\" y=\"-14.3\">0</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- I&#45;&gt;0 -->\n",
"<g class=\"edge\" id=\"edge1\">\n",
"<title>I-&gt;0</title>\n",
"<path d=\"M1.1233,-28.4783C4.178,-28.4783 17.9448,-28.4783 30.9241,-28.4783\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"37.9807,-28.4783 30.9808,-31.6284 34.4807,-28.4784 30.9807,-28.4784 30.9807,-28.4784 30.9807,-28.4784 34.4807,-28.4784 30.9807,-25.3284 37.9807,-28.4783 37.9807,-28.4783\" stroke=\"#000000\"/>\n",
"<path d=\"M1.1233,-18C4.178,-18 17.9448,-18 30.9241,-18\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"37.9807,-18 30.9808,-21.1501 34.4807,-18 30.9807,-18.0001 30.9807,-18.0001 30.9807,-18.0001 34.4807,-18 30.9807,-14.8501 37.9807,-18 37.9807,-18\" stroke=\"#000000\"/>\n",
"</g>\n",
"<!-- 0&#45;&gt;0 -->\n",
"<g class=\"edge\" id=\"edge2\">\n",
"<title>0-&gt;0</title>\n",
"<path d=\"M49.6208,-35.0373C48.3189,-44.8579 50.4453,-54 56,-54 60.166,-54 62.4036,-48.8576 62.7128,-42.1433\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"62.3792,-35.0373 65.8541,-41.8818 62.5434,-38.5335 62.7076,-42.0296 62.7076,-42.0296 62.7076,-42.0296 62.5434,-38.5335 59.561,-42.1774 62.3792,-35.0373 62.3792,-35.0373\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"37.5\" y=\"-72.8\">a &amp; !b</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"48\" y=\"-57.8\">⓿</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g class=\"node\" id=\"node3\">\n",
"<title>1</title>\n",
"<g id=\"a_node3\"><a xlink:title=\"0,1\">\n",
"<ellipse cx=\"275\" cy=\"-122.4783\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"275\" y=\"-118.7783\">1</text>\n",
"<ellipse cx=\"162.5\" cy=\"-88\" fill=\"#ffffaa\" rx=\"18\" ry=\"18\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"middle\" x=\"162.5\" y=\"-84.3\">1</text>\n",
"</a>\n",
"</g>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g class=\"edge\" id=\"edge2\">\n",
"<g class=\"edge\" id=\"edge3\">\n",
"<title>0-&gt;1</title>\n",
"<path d=\"M68.0094,-42.1794C84.1073,-59.5594 114.4491,-89.0069 147,-103.4783 180.4004,-118.3274 223.0486,-121.9763 249.6981,-122.6637\" fill=\"none\" stroke=\"#000000\"/>\n",
"<polygon fill=\"#000000\" points=\"256.7693,-122.7859 249.7159,-125.8144 253.2698,-122.7254 249.7704,-122.6649 249.7704,-122.6649 249.7704,-122.6649 253.2698,-122.7254 249.8248,-119.5153 256.7693,-122.7859 256.7693,-122.7859\" stroke=\"#000000\"/>\n",
"<text fill=\"#000000\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"147\" y=\"-133.2783\">!a &amp; b</text>\n",
"<text fill=\"#1f78b4\" font-family=\"Lato\" font-size=\"14.00\" text-anchor=\"start\" x=\"157.5\" y=\"-118.2783\">⓿</text>\n",
"<path d=\"M71.2589,-28.0293C89.6065,-40.0888 120.5099,-60.4009 141.2011,-74.0007\" fill=\"none\" stroke=\"#000000\"/>\n",