Commit f3e57901 authored by Alexandre Duret-Lutz's avatar Alexandre Duret-Lutz

simulation: improve merging of transiant-SCCs

* spot/twaalgos/simulation.cc: Code this.
* tests/core/det.test, tests/core/dra2dba.test,
tests/core/satmin.test, tests/core/sim3.test,
tests/python/decompose.ipynb, tests/python/dualize.py: Adjust test
cases.
* NEWS: Mention the optimization.
parent c9ddbd0a
Pipeline #10147 passed with stages
in 154 minutes and 55 seconds
......@@ -45,6 +45,9 @@ New in spot 2.7.5.dev (not yet released)
'ltldo ltl2dstar -f 'GFa -> GFb' | autfilt --small' produces 1
state instead of 4.)
- simulation-based reductions hae learned another trick to better
merge states from transiant SCCs.
- acc_cond::top_disjuncts() and acc_cond::top_conjuncts() can be
used to split an acceptance condition on the top-level & or |.
These methods also exist in acc_cond::acc_code.
......
......@@ -23,6 +23,7 @@
#include <utility>
#include <cmath>
#include <limits>
#include <numeric>
#include <spot/twaalgos/simulation.hh>
#include <spot/misc/minato.hh>
#include <spot/twa/bddprint.hh>
......@@ -493,7 +494,7 @@ namespace spot
}
}
// Build the minimal resulting automaton.
// Build the simplified automaton.
twa_graph_ptr build_result()
{
twa_graph_ptr res = make_twa_graph(a_->get_dict());
......@@ -526,6 +527,9 @@ namespace spot
(*record_implications_)[s] = relation_[cl];
}
std::vector<bdd> signatures;
signatures.reserve(sorted_classes_.size());
// Acceptance of states. Only used if Sba && Cosimulation.
std::vector<acc_cond::mark_t> accst;
if (Sba && Cosimulation)
......@@ -538,6 +542,7 @@ namespace spot
unsigned nb_minato = 0;
auto all_inf = all_inf_;
unsigned srcst = 0;
// For each class, we will create
// all the edges between the states.
for (auto& p: sorted_classes_)
......@@ -552,7 +557,11 @@ namespace spot
if (Cosimulation)
sig = bdd_compose(sig, bddfalse, bdd_var(bdd_initial));
// Get all the variable in the signature.
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.
bdd sup_sig = bdd_support(sig);
// Get the variable in the signature which represents the
......@@ -607,7 +616,6 @@ namespace spot
// acceptance conditions on the input automaton,
// we must revert them to create a new edge.
acc ^= all_inf;
if (Cosimulation)
{
if (Sba)
......@@ -617,7 +625,7 @@ namespace spot
// to all edges leaving src. As we
// can't do this here, store this in a table
// so we can fix it later.
accst[gb->get_state(src.id())] = acc;
accst[srcst] = acc;
acc = {};
}
gb->new_edge(dst.id(), src.id(), cond, acc);
......@@ -628,6 +636,7 @@ namespace spot
}
}
}
++srcst;
}
res->set_init_state(gb->get_state(previous_class_
......@@ -652,6 +661,41 @@ namespace spot
}
}
// Attempt to merge trivial SCCs
if (!record_implications_ && res->num_states() > 1)
{
scc_info si(res, scc_info_options::NONE);
unsigned nscc = si.scc_count();
unsigned nstates = res->num_states();
std::vector<unsigned> redirect(nstates);
std::iota(redirect.begin(), redirect.end(), 0);
bool changed = false;
for (unsigned scc = 0; scc < nscc; ++scc)
if (si.is_trivial(scc))
{
unsigned s = si.one_state_of(scc);
bdd ref = signatures[s];
for (unsigned i = 0; i < nstates; ++i)
if (si.reachable_state(i)
&& signatures[i] == ref && !si.is_trivial(si.scc_of(i)))
{
changed = true;
redirect[s] = i;
break;
}
}
if (changed)
{
if (Cosimulation)
for (auto& e: res->edges())
e.src = redirect[e.src];
else
for (auto& e: res->edges())
e.dst = redirect[e.dst];
res->set_init_state(redirect[res->get_init_state_number()]);
}
}
// If we recorded implications for the determinization
// procedure, we should not remove unreachable states, as that
// will invalidate the contents of the IMPLICATIONS vector.
......
#!/bin/sh
# -*- coding: utf-8 -*-
# Copyright (C) 2013-2018 Laboratoire de Recherche et Développement de
# Copyright (C) 2013-2019 Laboratoire de Recherche et Développement de
# l'Epita (LRDE).
#
# This file is part of Spot, a model checking library.
......@@ -24,17 +24,17 @@ set -e
cat >formulas <<'EOF'
1,13,X((a M F((!b & !c) | (b & c))) W (G!c U b))
1,5,X(((a & b) R (!a U !c)) R b)
1,9,XXG(Fa U Xb)
1,8,XXG(Fa U Xb)
1,5,(!a M !b) W F!c
1,3,(b & Fa & GFc) R a
1,2,(a R (b W a)) W G(!a M (b | c))
1,11,(Fa W b) R (!a | Fc)
1,7,X(G(!a M !b) | G(a | G!a))
1,6,X(G(!a M !b) | G(a | G!a))
1,2,Fa W Gb
1,3,Ga | GFb
1,2,Ga | GFb
1,9,G((G!a & ((!b & X!c) | (b & Xc))) | (Fa & ((!b & Xc) | (b & X!c))))
1,5,a M G(F!b | X!a)
1,4,G!a R XFb
1,3,G!a R XFb
1,4,XF(!a | GFb)
1,5,X(GF!a U a)
1,5,(a | G(a M !b)) W Fc
......@@ -43,14 +43,14 @@ cat >formulas <<'EOF'
1,2,XG!a R Fb
1,4,GFc | (a & Fb)
1,6,X(a R (Fb R F!b))
1,2,G(Xa M Fa)
1,4,X(Gb | GFa)
1,1,G(Xa M Fa)
1,3,X(Gb | GFa)
1,9,X(Gc | XG((b & Ga) | (!b & F!a)))
1,2,Ga R Fb
1,3,G(a U (b | X((!a & !c) | (a & c))))
1,5,XG((G!a & F!b) | (Fa & (a | Gb)))
1,9,(a U X!a) | XG(!b & Fc)
1,4,X(G!a | GFa)
1,7,(a U X!a) | XG(!b & Fc)
1,3,X(G!a | GFa)
1,4,G(G!a | F!c | G!b)
EOF
......
......@@ -330,4 +330,5 @@ Acc-Sig: +2
EOF
autcross 'dstar2tgba -D' --language-preserved -F in.dra --csv=out.csv
grep '3,18,107,144,1,2,0,0,0$' out.csv
cat out.csv
grep '3,17,104,136,1,1,0,0,0$' out.csv
#!/bin/sh
# -*- coding: utf-8 -*-
# Copyright (C) 2013, 2017, 2018 Laboratoire de Recherche et Développement
# Copyright (C) 2013, 2017, 2018, 2019 Laboratoire de Recherche et Développement
# de l'Epita (LRDE).
#
# This file is part of Spot, a model checking library.
......@@ -949,7 +949,7 @@ cat >expected <<'EOF'
"!(((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2)))))","16",4
"!(((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2)))))","17",4
"X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0))))))","1",5
"X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0))))))","2",7
"X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0))))))","2",6
"X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0))))))","3",6
"X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0))))))","4",6
"X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0))))))","6",6
......@@ -1013,7 +1013,7 @@ cat >expected <<'EOF'
"!((F(p0)) W (G(p1)))","16",2
"!((F(p0)) W (G(p1)))","17",2
"(G(F(p1))) | (G(p0))","1",3
"(G(F(p1))) | (G(p0))","2",3
"(G(F(p1))) | (G(p0))","2",2
"(G(F(p1))) | (G(p0))","3",2
"(G(F(p1))) | (G(p0))","4",2
"(G(F(p1))) | (G(p0))","6",2
......@@ -1076,8 +1076,8 @@ cat >expected <<'EOF'
"!((p0) M (G((F(!(p1))) | (X(!(p0))))))","15",4
"!((p0) M (G((F(!(p1))) | (X(!(p0))))))","16",4
"!((p0) M (G((F(!(p1))) | (X(!(p0))))))","17",4
"(G(!(p0))) R (X(F(p1)))","1",4
"(G(!(p0))) R (X(F(p1)))","2",4
"(G(!(p0))) R (X(F(p1)))","1",3
"(G(!(p0))) R (X(F(p1)))","2",3
"(G(!(p0))) R (X(F(p1)))","3",3
"(G(!(p0))) R (X(F(p1)))","4",3
"(G(!(p0))) R (X(F(p1)))","6",3
......@@ -1333,7 +1333,7 @@ cat >expected <<'EOF'
"!(X((p0) R ((F(p1)) R (F(!(p1))))))","16",3
"!(X((p0) R ((F(p1)) R (F(!(p1))))))","17",3
"G((X(p0)) M (F(p0)))","1",2
"G((X(p0)) M (F(p0)))","2",2
"G((X(p0)) M (F(p0)))","2",1
"G((X(p0)) M (F(p0)))","3",1
"G((X(p0)) M (F(p0)))","4",1
"G((X(p0)) M (F(p0)))","6",1
......@@ -1365,7 +1365,7 @@ cat >expected <<'EOF'
"!(G((X(p0)) M (F(p0))))","16",2
"!(G((X(p0)) M (F(p0))))","17",2
"X((G(F(p1))) | (G(p0)))","1",4
"X((G(F(p1))) | (G(p0)))","2",4
"X((G(F(p1))) | (G(p0)))","2",3
"X((G(F(p1))) | (G(p0)))","3",3
"X((G(F(p1))) | (G(p0)))","4",3
"X((G(F(p1))) | (G(p0)))","6",3
......@@ -1493,7 +1493,7 @@ cat >expected <<'EOF'
"!(X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1)))))))","16",7
"!(X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1)))))))","17",7
"X((G(F(p0))) | (G(!(p0))))","1",4
"X((G(F(p0))) | (G(!(p0))))","2",4
"X((G(F(p0))) | (G(!(p0))))","2",3
"X((G(F(p0))) | (G(!(p0))))","3",3
"X((G(F(p0))) | (G(!(p0))))","4",3
"X((G(F(p0))) | (G(!(p0))))","6",3
......
......@@ -47,7 +47,7 @@ State: 6 {0 3}
--END--
EOF
test "`autfilt --small input --stats=%S,%s`" = 7,2
test "`autfilt --small input --stats=%S,%s`" = 7,1
autfilt -S --high --small input -H > out
cat >expected <<EOF
......
......@@ -200,7 +200,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d85c40f0> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b8c2eaf30> >"
]
},
"execution_count": 2,
......@@ -330,7 +330,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d85c40c0> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b8c2f7270> >"
]
},
"execution_count": 3,
......@@ -489,7 +489,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d860a060> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b8c2f70f0> >"
]
},
"execution_count": 4,
......@@ -587,7 +587,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d85c4120> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b8c2f7540> >"
]
},
"execution_count": 5,
......@@ -669,7 +669,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d8571690> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b8c2f7810> >"
]
},
"execution_count": 6,
......@@ -796,7 +796,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d8571360> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b8c2f7630> >"
]
},
"metadata": {},
......@@ -941,7 +941,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d860a240> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b8c2f7420> >"
]
},
"metadata": {},
......@@ -1109,7 +1109,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d862fed0> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b8c2f7a50> >"
]
},
"metadata": {},
......@@ -1512,7 +1512,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d8571540> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b8c283210> >"
]
},
"execution_count": 8,
......@@ -1942,7 +1942,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d85c4030> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b8c283360> >"
]
},
"metadata": {},
......@@ -2174,7 +2174,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d85c4150> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b8c2f7a50> >"
]
},
"metadata": {},
......@@ -2384,7 +2384,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d85bbfc0> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b8c2f7bd0> >"
]
},
"metadata": {},
......@@ -2772,7 +2772,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d8571a80> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b8c2838d0> >"
]
},
"execution_count": 10,
......@@ -2933,7 +2933,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d8571bd0> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b8c2f7450> >"
]
},
"metadata": {},
......@@ -3072,7 +3072,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d8571b10> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b8c2f7d50> >"
]
},
"metadata": {},
......@@ -3087,200 +3087,145 @@
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
" -->\n",
"<!-- Title: strong Pages: 1 -->\n",
"<svg width=\"734pt\" height=\"272pt\"\n",
" viewBox=\"0.00 0.00 734.00 272.33\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(.8105 .8105) rotate(0) translate(4 332)\">\n",
"<svg width=\"712pt\" height=\"254pt\"\n",
" viewBox=\"0.00 0.00 712.36 254.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 250)\">\n",
"<title>strong</title>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-332 901.6224,-332 901.6224,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"428.3112\" y=\"-313.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">strong</text>\n",
"<text text-anchor=\"start\" x=\"366.8112\" y=\"-299.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"388.8112\" y=\"-299.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"404.8112\" y=\"-299.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">) | (Fin(</text>\n",
"<text text-anchor=\"start\" x=\"447.8112\" y=\"-299.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"463.8112\" y=\"-299.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">) &amp; Inf(</text>\n",
"<text text-anchor=\"start\" x=\"506.8112\" y=\"-299.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"<text text-anchor=\"start\" x=\"522.8112\" y=\"-299.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">))</text>\n",
"<text text-anchor=\"start\" x=\"388.8112\" y=\"-285.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">[parity min even 3]</text>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-250 708.3625,-250 708.3625,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"331.6812\" y=\"-231.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">strong</text>\n",
"<text text-anchor=\"start\" x=\"270.1812\" y=\"-217.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"292.1812\" y=\"-217.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"308.1812\" y=\"-217.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">) | (Fin(</text>\n",
"<text text-anchor=\"start\" x=\"351.1812\" y=\"-217.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<text text-anchor=\"start\" x=\"367.1812\" y=\"-217.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">) &amp; Inf(</text>\n",
"<text text-anchor=\"start\" x=\"410.1812\" y=\"-217.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"<text text-anchor=\"start\" x=\"426.1812\" y=\"-217.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">))</text>\n",
"<text text-anchor=\"start\" x=\"292.1812\" y=\"-203.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">[parity min even 3]</text>\n",
"<g id=\"clust1\" class=\"cluster\">\n",
"<title>cluster_0</title>\n",
"<polygon fill=\"none\" stroke=\"#00ff00\" points=\"284,-38 284,-243 889.6224,-243 889.6224,-38 284,-38\"/>\n",
"<polygon fill=\"none\" stroke=\"#00ff00\" points=\"168,-20 168,-188 696.3625,-188 696.3625,-20 168,-20\"/>\n",
"</g>\n",
"<g id=\"clust2\" class=\"cluster\">\n",
"<title>cluster_1</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"170,-156 170,-208 222,-208 222,-156 170,-156\"/>\n",
"</g>\n",
"<g id=\"clust3\" class=\"cluster\">\n",
"<title>cluster_2</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"170,-43 170,-95 222,-95 222,-43 170,-43\"/>\n",
"</g>\n",
"<g id=\"clust4\" class=\"cluster\">\n",
"<title>cluster_3</title>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"30,-105 30,-157 82,-157 82,-105 30,-105\"/>\n",
"<polygon fill=\"none\" stroke=\"#000000\" points=\"30,-8 30,-60 82,-60 82,-8 30,-8\"/>\n",
"</g>\n",
"<!-- I -->\n",
"<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"56\" cy=\"-131\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-127.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">0</text>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"56\" cy=\"-34\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-30.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">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=\"#000000\" d=\"M1.1233,-131C4.178,-131 17.9448,-131 30.9241,-131\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"37.9807,-131 30.9808,-134.1501 34.4807,-131 30.9807,-131.0001 30.9807,-131.0001 30.9807,-131.0001 34.4807,-131 30.9807,-127.8501 37.9807,-131 37.9807,-131\"/>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M1.1233,-34C4.178,-34 17.9448,-34 30.9241,-34\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"37.9807,-34 30.9808,-37.1501 34.4807,-34 30.9807,-34.0001 30.9807,-34.0001 30.9807,-34.0001 34.4807,-34 30.9807,-30.8501 37.9807,-34 37.9807,-34\"/>\n",
"</g>\n",
"<!-- 3 -->\n",
"<!-- 2 -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"325.9411\" cy=\"-135\" rx=\"33.8824\" ry=\"33.8824\"/>\n",
"<text text-anchor=\"start\" x=\"321.4411\" y=\"-138.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">3</text>\n",
"<text text-anchor=\"start\" x=\"309.9411\" y=\"-124.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"325.9411\" y=\"-124.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"202.8701\" cy=\"-107\" rx=\"26.7407\" ry=\"26.7407\"/>\n",
"<text text-anchor=\"start\" x=\"198.3701\" y=\"-110.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">2</text>\n",
"<text text-anchor=\"start\" x=\"194.8701\" y=\"-95.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</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=\"#000000\" d=\"M74.1308,-131.2687C116.9555,-131.9032 225.2462,-133.5079 284.9198,-134.3921\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"291.9484,-134.4963 284.9024,-137.5421 288.4488,-134.4444 284.9491,-134.3925 284.9491,-134.3925 284.9491,-134.3925 288.4488,-134.4444 284.9959,-131.2428 291.9484,-134.4963 291.9484,-134.4963\"/>\n",
"<text text-anchor=\"start\" x=\"176\" y=\"-136.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a &amp; !c</text>\n",
"<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M72.2788,-42.0912C96.3033,-54.0323 141.6869,-76.5897 172.1084,-91.7103\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"178.7383,-95.0056 171.0678,-94.7107 175.6041,-93.4477 172.4699,-91.8899 172.4699,-91.8899 172.4699,-91.8899 175.6041,-93.4477 173.8719,-89.0691 178.7383,-95.0056 178.7383,-95.0056\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-86.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; !b &amp; !c</text>\n",
"</g>\n",
"<!-- 1 -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"196\" cy=\"-182\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"196\" y=\"-178.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"464.6812\" cy=\"-62\" rx=\"33.8824\" ry=\"33.8824\"/>\n",
"<text text-anchor=\"start\" x=\"460.1812\" y=\"-65.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
"<text text-anchor=\"start\" x=\"448.6812\" y=\"-51.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"464.6812\" y=\"-51.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M72.8108,-137.6541C78.8474,-140.0126 85.7153,-142.6606 92,-145 119.2701,-155.151 150.7769,-166.2765 171.9016,-173.6496\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"178.6466,-175.9994 170.9999,-176.6711 175.3414,-174.8479 172.0362,-173.6964 172.0362,-173.6964 172.0362,-173.6964 175.3414,-174.8479 173.0726,-170.7218 178.6466,-175.9994 178.6466,-175.9994\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-171.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; !b &amp; !c</text>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M74.0878,-35.2393C135.391,-39.4393 336.3157,-53.2053 423.5963,-59.1851\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"430.6823,-59.6706 423.4833,-62.3347 427.1905,-59.4313 423.6987,-59.1921 423.6987,-59.1921 423.6987,-59.1921 427.1905,-59.4313 423.914,-56.0494 430.6823,-59.6706 430.6823,-59.6706\"/>\n",
"<text text-anchor=\"start\" x=\"247.7401\" y=\"-54.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; b &amp; !c</text>\n",
"</g>\n",
"<!-- 2 -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"196\" cy=\"-69\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"196\" y=\"-65.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">2</text>\n",
"<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M73.9107,-31.9661C115.4814,-27.5964 221.6867,-18.4524 309.7401,-28 349.4483,-32.3055 393.8939,-42.6451 424.9646,-50.7999\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"431.7769,-52.6091 424.2029,-53.8567 428.3942,-51.7107 425.0115,-50.8123 425.0115,-50.8123 425.0115,-50.8123 428.3942,-51.7107 425.82,-47.7678 431.7769,-52.6091 431.7769,-52.6091\"/>\n",
"<text text-anchor=\"start\" x=\"258.7401\" y=\"-31.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a &amp; !c</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=\"#000000\" d=\"M69.1644,-118.4178C75.6369,-112.7707 83.7975,-106.4035 92,-102 117.491,-88.3152 149.5844,-79.2132 171.3283,-74.0967\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"178.2811,-72.5135 172.1552,-77.1391 174.8685,-73.2906 171.4558,-74.0677 171.4558,-74.0677 171.4558,-74.0677 174.8685,-73.2906 170.7564,-70.9964 178.2811,-72.5135 178.2811,-72.5135\"/>\n",
"<text text-anchor=\"start\" x=\"94\" y=\"-105.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; b &amp; !c</text>\n",
"<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M189.3338,-130.5464C187.6627,-141.8722 192.1747,-151.8701 202.8701,-151.8701 211.2258,-151.8701 215.8075,-145.7678 216.6154,-137.6976\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"216.4063,-130.5464 219.7596,-137.4513 216.5086,-134.0449 216.611,-137.5434 216.611,-137.5434 216.611,-137.5434 216.5086,-134.0449 213.4623,-137.6355 216.4063,-130.5464 216.4063,-130.5464\"/>\n",
"<text text-anchor=\"start\" x=\"184.8701\" y=\"-155.6701\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; !c</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M312.8289,-166.4426C312.547,-177.7348 316.9177,-186.9411 325.9411,-186.9411 332.9907,-186.9411 337.2005,-181.322 338.5704,-173.4791\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"339.0533,-166.4426 341.7166,-173.6419 338.8136,-169.9344 338.574,-173.4262 338.574,-173.4262 338.574,-173.4262 338.8136,-169.9344 335.4314,-173.2105 339.0533,-166.4426 339.0533,-166.4426\"/>\n",
"<text text-anchor=\"start\" x=\"305.9411\" y=\"-190.7411\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a &amp; !c</text>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M229.0569,-100.6806C254.2385,-94.76 293.4306,-85.9538 327.7401,-80 359.8381,-74.43 396.4358,-69.7024 423.717,-66.4919\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"430.7976,-65.668 424.2087,-69.606 427.3211,-66.0726 423.8446,-66.4771 423.8446,-66.4771 423.8446,-66.4771 427.3211,-66.0726 423.4805,-63.3482 430.7976,-65.668 430.7976,-65.668\"/>\n",
"<text text-anchor=\"start\" x=\"340.7401\" y=\"-83.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a &amp; !c</text>\n",
"</g>\n",
"<!-- 4 -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"854.7523\" cy=\"-169\" rx=\"26.7407\" ry=\"26.7407\"/>\n",
"<text text-anchor=\"start\" x=\"850.2523\" y=\"-172.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">4</text>\n",
"<text text-anchor=\"start\" x=\"846.7523\" y=\"-157.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"<!-- 1&#45;&gt;2 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>1&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M436.1813,-80.5247C423.6748,-87.6659 408.5011,-95.0524 393.7401,-99 340.4231,-113.2587 275.7721,-112.3607 237.0501,-109.9856\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"229.6624,-109.495 236.8558,-106.8159 233.1547,-109.7269 236.647,-109.9589 236.647,-109.9589 236.647,-109.9589 233.1547,-109.7269 236.4382,-113.102 229.6624,-109.495 229.6624,-109.495\"/>\n",
"<text text-anchor=\"start\" x=\"327.7401\" y=\"-112.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; !b &amp; !c</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>3&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M351.1932,-158.0022C381.5398,-183.1753 435.1204,-220 488.8823,-220 488.8823,-220 488.8823,-220 757.8823,-220 784.0082,-220 810.007,-205.2955 828.4824,-191.678\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"834.4489,-187.1243 830.7955,-193.8753 831.6667,-189.2478 828.8844,-191.3712 828.8844,-191.3712 828.8844,-191.3712 831.6667,-189.2478 826.9733,-188.8672 834.4489,-187.1243 834.4489,-187.1243\"/>\n",
"<text text-anchor=\"start\" x=\"621.8823\" y=\"-223.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; !b &amp; !c</text>\n",
"<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M454.9318,-94.7164C454.9822,-105.419 458.232,-113.9411 464.6812,-113.9411 469.6189,-113.9411 472.6812,-108.9456 473.868,-101.8007\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"474.4306,-94.7164 477.0164,-101.9439 474.1535,-98.2054 473.8763,-101.6944 473.8763,-101.6944 473.8763,-101.6944 474.1535,-98.2054 470.7362,-101.445 474.4306,-94.7164 474.4306,-94.7164\"/>\n",
"<text text-anchor=\"start\" x=\"444.6812\" y=\"-117.7411\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a &amp; !c</text>\n",
"</g>\n",
"<!-- 5 -->\n",
"<!-- 3 -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>5</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"654.8823\" cy=\"-73\" rx=\"26.7407\" ry=\"26.7407\"/>\n",
"<text text-anchor=\"start\" x=\"650.3823\" y=\"-76.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">5</text>\n",
"<text text-anchor=\"start\" x=\"646.8823\" y=\"-61.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 3&#45;&gt;5 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>3&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M358.4194,-124.4483C384.9285,-116.187 423.4901,-104.9651 457.8823,-98 514.5038,-86.533 581.407,-79.3664 620.8715,-75.7835\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"627.9123,-75.1559 621.2197,-78.915 624.4262,-75.4667 620.94,-75.7775 620.94,-75.7775 620.94,-75.7775 624.4262,-75.4667 620.6603,-72.6399 627.9123,-75.1559 627.9123,-75.1559\"/>\n",
"<text text-anchor=\"start\" x=\"457.8823\" y=\"-101.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; b &amp; !c</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;3 -->\n",
"<g id=\"edge13\" class=\"edge\">\n",
"<title>4&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M827.6113,-169C808.1909,-169 781.4271,-169 757.8823,-169 488.8823,-169 488.8823,-169 488.8823,-169 445.8512,-169 397.7501,-157.4963 365.0365,-147.8717\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"358.2967,-145.8513 365.9064,-144.8441 361.6493,-146.8564 365.0019,-147.8614 365.0019,-147.8614 365.0019,-147.8614 361.6493,-146.8564 364.0973,-150.8788 358.2967,-145.8513 358.2967,-145.8513\"/>\n",
"<text text-anchor=\"start\" x=\"634.8823\" y=\"-172.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a &amp; !c</text>\n",
"</g>\n",
"<!-- 4&#45;&gt;4 -->\n",
"<g id=\"edge14\" class=\"edge\">\n",
"<title>4&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M846.5527,-194.8213C846.0894,-205.1776 848.8226,-213.8701 854.7523,-213.8701 859.1996,-213.8701 861.8488,-208.9805 862.7001,-202.1667\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"862.952,-194.8213 865.8601,-201.9252 862.832,-198.3193 862.712,-201.8172 862.712,-201.8172 862.712,-201.8172 862.832,-198.3193 859.5638,-201.7092 862.952,-194.8213 862.952,-194.8213\"/>\n",
"<text text-anchor=\"start\" x=\"836.7523\" y=\"-217.6701\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; !c</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;3 -->\n",
"<g id=\"edge15\" class=\"edge\">\n",
"<title>5&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M629.3409,-82.0285C602.4421,-91.1899 558.6893,-105.113 519.8823,-113 467.6753,-123.6103 406.4473,-129.4858 366.9679,-132.4403\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"359.8564,-132.9585 366.6089,-129.308 363.3471,-132.7041 366.8379,-132.4497 366.8379,-132.4497 366.8379,-132.4497 363.3471,-132.7041 367.0668,-135.5914 359.8564,-132.9585 359.8564,-132.9585\"/>\n",
"<text text-anchor=\"start\" x=\"468.8823\" y=\"-126.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a &amp; !c</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;4 -->\n",
"<g id=\"edge16\" class=\"edge\">\n",
"<title>5&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M679.3902,-84.7715C715.7514,-102.2362 783.9629,-134.999 823.7489,-154.1087\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"830.3568,-157.2825 822.683,-157.0912 827.2018,-155.7672 824.0469,-154.2518 824.0469,-154.2518 824.0469,-154.2518 827.2018,-155.7672 825.4107,-151.4123 830.3568,-157.2825 830.3568,-157.2825\"/>\n",
"<text text-anchor=\"start\" x=\"724.8823\" y=\"-141.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; !b &amp; !c</text>\n",
"</g>\n",
"<!-- 5&#45;&gt;5 -->\n",
"<g id=\"edge17\" class=\"edge\">\n",
"<title>5&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M645.5896,-98.37C644.9488,-108.9238 648.0463,-117.8701 654.8823,-117.8701 660.116,-117.8701 663.1584,-112.6259 664.0094,-105.4312\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"664.1749,-98.37 667.1599,-105.4419 664.0928,-101.869 664.0108,-105.3681 664.0108,-105.3681 664.0108,-105.3681 664.0928,-101.869 660.8616,-105.2943 664.1749,-98.37 664.1749,-98.37\"/>\n",
"<text text-anchor=\"start\" x=\"623.8823\" y=\"-121.6701\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; b &amp; !c</text>\n",
"<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"661.4924\" cy=\"-113\" rx=\"26.7407\" ry=\"26.7407\"/>\n",
"<text text-anchor=\"start\" x=\"656.9924\" y=\"-116.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">3</text>\n",
"<text text-anchor=\"start\" x=\"653.4924\" y=\"-101.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;3 -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>1&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M212.9875,-175.8556C231.7261,-169.0778 262.4965,-157.9481 287.1928,-149.0154\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"293.9823,-146.5596 288.4711,-151.9028 290.691,-147.7501 287.3997,-148.9406 287.3997,-148.9406 287.3997,-148.9406 290.691,-147.7501 286.3282,-145.9784 293.9823,-146.5596 293.9823,-146.5596\"/>\n",
"<text text-anchor=\"start\" x=\"234\" y=\"-171.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a &amp; !c</text>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M498.8191,-61.7046C526.1661,-62.3835 565.1856,-65.4308 597.6224,-76 610.0484,-80.0489 622.7104,-86.7439 633.4483,-93.3341\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"639.5319,-97.1814 631.932,-96.1022 636.5738,-95.3106 633.6157,-93.4399 633.6157,-93.4399 633.6157,-93.4399 636.5738,-95.3106 635.2993,-90.7776 639.5319,-97.1814 639.5319,-97.1814\"/>\n",
"<text text-anchor=\"start\" x=\"535.6224\" y=\"-79.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; b &amp; !c</text>\n",
"</g>\n",
"<!-- 1&#45;&gt;4 -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>1&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M207.7184,-195.7405C228.8167,-218.8502 275.6987,-263 325.9411,-263 325.9411,-263 325.9411,-263 757.8823,-263 794.9805,-263 823.2403,-227.0535 839.4061,-199.6186\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"843.0592,-193.2073 842.3305,-200.8488 841.3264,-196.2483 839.5936,-199.2893 839.5936,-199.2893 839.5936,-199.2893 841.3264,-196.2483 836.8567,-197.7298 843.0592,-193.2073 843.0592,-193.2073\"/>\n",
"<text text-anchor=\"start\" x=\"552.8823\" y=\"-266.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; !c</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;3 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M213.1089,-75.2945C229.1664,-81.4211 253.6874,-91.3444 274,-102 279.7667,-105.0251 285.7319,-108.4805 291.4742,-111.9897\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"297.5977,-115.8009 289.9902,-114.7764 294.6262,-113.9515 291.6547,-112.102 291.6547,-112.102 291.6547,-112.102 294.6262,-113.9515 293.3192,-109.4277 297.5977,-115.8009 297.5977,-115.8009\"/>\n",
"<text text-anchor=\"start\" x=\"234\" y=\"-105.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a &amp; !c</text>\n",
"<!-- 3&#45;&gt;2 -->\n",
"<g id=\"edge11\" class=\"edge\">\n",
"<title>3&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M641.7336,-131.4797C623.6336,-146.426 595.3594,-165 566.6224,-165 360.7401,-165 360.7401,-165 360.7401,-165 313.4437,-165 262.7963,-141.78 231.9734,-124.7239\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"225.7053,-121.1884 233.3499,-121.8838 228.7538,-122.9079 231.8023,-124.6274 231.8023,-124.6274 231.8023,-124.6274 228.7538,-122.9079 230.2548,-127.3711 225.7053,-121.1884 225.7053,-121.1884\"/>\n",
"<text text-anchor=\"start\" x=\"431.6812\" y=\"-168.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; !b &amp; !c</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;4 -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>2&#45;&gt;4</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M209.1767,-56.3443C231.3646,-36.4246 278.4321,0 325.9411,0 325.9411,0 325.9411,0 757.8823,0 819.6088,0 842.5588,-85.9101 850.6479,-135.2255\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"851.7364,-142.2214 847.5476,-135.789 851.1982,-138.7631 850.6601,-135.3047 850.6601,-135.3047 850.6601,-135.3047 851.1982,-138.7631 853.7727,-134.8204 851.7364,-142.2214 851.7364,-142.2214\"/>\n",
"<text text-anchor=\"start\" x=\"537.8823\" y=\"-3.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; !b &amp; !c</text>\n",
"<!-- 3&#45;&gt;1 -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>3&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M634.5945,-110.0009C608.8483,-106.7331 569.0891,-100.6434 535.6224,-91 524.5051,-87.7966 512.7557,-83.4236 502.086,-79.0452\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"495.5975,-76.3287 503.2709,-76.1264 498.826,-77.6803 502.0544,-79.032 502.0544,-79.032 502.0544,-79.032 498.826,-77.6803 500.8379,-81.9376 495.5975,-76.3287 495.5975,-76.3287\"/>\n",
"<text text-anchor=\"start\" x=\"546.6224\" y=\"-107.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a &amp; !c</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;5 -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>2&#45;&gt;5</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M214.2719,-69.1593C283.4106,-69.7619 529.6825,-71.9087 620.7266,-72.7023\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"627.7753,-72.7637 620.748,-75.8525 624.2754,-72.7332 620.7755,-72.7026 620.7755,-72.7026 620.7755,-72.7026 624.2754,-72.7332 620.803,-69.5527 627.7753,-72.7637 627.7753,-72.7637\"/>\n",
"<text text-anchor=\"start\" x=\"377.8823\" y=\"-74.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; b &amp; !c</text>\n",
"<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge12\" class=\"edge\">\n",
"<title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M653.2928,-138.8213C652.8295,-149.1776 655.5627,-157.8701 661.4924,-157.8701 665.9397,-157.8701 668.5889,-152.9805 669.4402,-146.1667\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"669.6921,-138.8213 672.6002,-145.9252 669.5721,-142.3193 669.4521,-145.8172 669.4521,-145.8172 669.4521,-145.8172 669.5721,-142.3193 666.3039,-145.7092 669.6921,-138.8213 669.6921,-138.8213\"/>\n",
"<text text-anchor=\"start\" x=\"630.4924\" y=\"-161.6701\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; b &amp; !c</text>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d8571630> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b8c2f7930> >"
]
},
"metadata": {},
......@@ -3633,7 +3578,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d8571ab0> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b8c2ea960> >"
]
},
"execution_count": 12,
......@@ -4016,7 +3961,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d85719c0> >"