zlktree: add a paritization based on zielonka trees
* spot/twaalgos/zlktree.hh, spot/twaalgos/zlktree.cc (zielonka_tree_transform): New function. * tests/python/_zlktree.ipynb: Test it on three examples.
This commit is contained in:
parent
c924c63255
commit
8c5bb6c2eb
3 changed files with 877 additions and 11 deletions
|
|
@ -20,13 +20,15 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <spot/twaalgos/zlktree.hh>
|
#include <spot/twaalgos/zlktree.hh>
|
||||||
|
#include <spot/twaalgos/sccinfo.hh>
|
||||||
|
#include <deque>
|
||||||
#include "spot/priv/bddalloc.hh"
|
#include "spot/priv/bddalloc.hh"
|
||||||
|
|
||||||
namespace spot
|
namespace spot
|
||||||
{
|
{
|
||||||
zielonka_tree::zielonka_tree(acc_cond& cond)
|
zielonka_tree::zielonka_tree(const acc_cond& cond)
|
||||||
{
|
{
|
||||||
acc_cond::acc_code& code = cond.get_acceptance();
|
const acc_cond::acc_code& code = cond.get_acceptance();
|
||||||
auto used = code.used_sets();
|
auto used = code.used_sets();
|
||||||
unsigned c = used.count();
|
unsigned c = used.count();
|
||||||
unsigned max = used.max_set();
|
unsigned max = used.max_set();
|
||||||
|
|
@ -225,4 +227,124 @@ namespace spot
|
||||||
}
|
}
|
||||||
return {branch, lvl};
|
return {branch, lvl};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
// A state in the zielonka_tree_transform output corresponds to a
|
||||||
|
// state in the input associated to a branch of the tree.
|
||||||
|
typedef std::pair<unsigned, unsigned> zlk_state;
|
||||||
|
|
||||||
|
struct zlk_state_hash
|
||||||
|
{
|
||||||
|
size_t
|
||||||
|
operator()(const zlk_state& s) const noexcept
|
||||||
|
{
|
||||||
|
return wang32_hash(s.first ^ wang32_hash(s.second));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
twa_graph_ptr
|
||||||
|
zielonka_tree_transform(const const_twa_graph_ptr& a)
|
||||||
|
{
|
||||||
|
auto res = make_twa_graph(a->get_dict());
|
||||||
|
res->copy_ap_of(a);
|
||||||
|
zielonka_tree zlk(a->get_acceptance());
|
||||||
|
|
||||||
|
// Preserve determinism, weakness, and stutter-invariance
|
||||||
|
res->prop_copy(a, { false, true, true, true, true, true });
|
||||||
|
|
||||||
|
auto orig_states = new std::vector<unsigned>();
|
||||||
|
auto branches = new std::vector<unsigned>();
|
||||||
|
unsigned ns = a->num_states();
|
||||||
|
orig_states->reserve(ns); // likely more are needed.
|
||||||
|
res->set_named_prop("original-states", orig_states);
|
||||||
|
res->set_named_prop("degen-levels", branches);
|
||||||
|
|
||||||
|
// Associate each zlk_state to its number.
|
||||||
|
typedef std::unordered_map<zlk_state, unsigned, zlk_state_hash> zs2num_map;
|
||||||
|
zs2num_map zs2num;
|
||||||
|
|
||||||
|
// Queue of states to be processed.
|
||||||
|
std::deque<zlk_state> todo;
|
||||||
|
|
||||||
|
auto new_state = [&](zlk_state zs)
|
||||||
|
{
|
||||||
|
if (auto i = zs2num.find(zs); i != zs2num.end())
|
||||||
|
return i->second;
|
||||||
|
|
||||||
|
unsigned ns = res->new_state();
|
||||||
|
zs2num[zs] = ns;
|
||||||
|
todo.emplace_back(zs);
|
||||||
|
|
||||||
|
unsigned orig = zs.first;
|
||||||
|
assert(ns == orig_states->size());
|
||||||
|
orig_states->emplace_back(orig);
|
||||||
|
branches->emplace_back(zs.second);
|
||||||
|
return ns;
|
||||||
|
};
|
||||||
|
|
||||||
|
zlk_state s(a->get_init_state_number(), zlk.first_branch());
|
||||||
|
new_state(s);
|
||||||
|
unsigned max_color = 0;
|
||||||
|
while (!todo.empty())
|
||||||
|
{
|
||||||
|
s = todo.front();
|
||||||
|
todo.pop_front();
|
||||||
|
int src = zs2num[s];
|
||||||
|
unsigned branch = s.second;
|
||||||
|
|
||||||
|
for (auto& i: a->out(s.first))
|
||||||
|
{
|
||||||
|
auto [newbranch, prio] = zlk.step(branch, i.acc);
|
||||||
|
zlk_state d(i.dst, newbranch);
|
||||||
|
unsigned dst = new_state(d);
|
||||||
|
max_color = std::max(max_color, prio);
|
||||||
|
res->new_edge(src, dst, i.cond, {prio});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
res->set_acceptance(max_color + 1,
|
||||||
|
acc_cond::acc_code::parity_min(!zlk.is_even(),
|
||||||
|
max_color + 1));
|
||||||
|
|
||||||
|
// compose original-states with the any previously existing one.
|
||||||
|
// We do that now, because for the bottommost copy below, it's better
|
||||||
|
// if we compose everything.
|
||||||
|
if (auto old_orig_states =
|
||||||
|
a->get_named_prop<std::vector<unsigned>>("original-states"))
|
||||||
|
for (auto& s: *orig_states)
|
||||||
|
s = (*old_orig_states)[s];
|
||||||
|
|
||||||
|
// Now we will iterate over the SCCs in topological order to
|
||||||
|
// remember the "bottommost" SCCs that contain each original
|
||||||
|
// state. If an original state is duplicated in a higher SCC,
|
||||||
|
// it can be shunted away. Amen.
|
||||||
|
scc_info si_res(res, scc_info_options::TRACK_STATES);
|
||||||
|
unsigned res_scc_count = si_res.scc_count();
|
||||||
|
unsigned maxorig = *std::max_element(orig_states->begin(),
|
||||||
|
orig_states->end());
|
||||||
|
std::vector<unsigned> bottommost_occurence(maxorig + 1);
|
||||||
|
{
|
||||||
|
unsigned n = res_scc_count;
|
||||||
|
do
|
||||||
|
for (unsigned s: si_res.states_of(--n))
|
||||||
|
bottommost_occurence[(*orig_states)[s]] = s;
|
||||||
|
while (n);
|
||||||
|
}
|
||||||
|
unsigned res_ns = res->num_states();
|
||||||
|
std::vector<unsigned> retarget(res_ns);
|
||||||
|
for (unsigned n = 0; n < res_ns; ++n)
|
||||||
|
{
|
||||||
|
unsigned other = bottommost_occurence[(*orig_states)[n]];
|
||||||
|
retarget[n] =
|
||||||
|
(si_res.scc_of(n) != si_res.scc_of(other)) ? other : n;
|
||||||
|
}
|
||||||
|
for (auto& e: res->edges())
|
||||||
|
e.dst = retarget[e.dst];
|
||||||
|
res->set_init_state(retarget[res->get_init_state_number()]);
|
||||||
|
res->purge_unreachable_states();
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ namespace spot
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/// \brief Build a Zielonka tree from the acceptance condition.
|
/// \brief Build a Zielonka tree from the acceptance condition.
|
||||||
zielonka_tree(acc_cond& cond);
|
zielonka_tree(const acc_cond& cond);
|
||||||
|
|
||||||
/// \brief The number of branches in the Zielonka tree.
|
/// \brief The number of branches in the Zielonka tree.
|
||||||
///
|
///
|
||||||
|
|
@ -129,4 +129,17 @@ namespace spot
|
||||||
bool has_streett_shape_ = true;
|
bool has_streett_shape_ = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// \ingroup twa_acc_transform
|
||||||
|
/// \brief Paritize an automaton using Zielonka tree.
|
||||||
|
///
|
||||||
|
/// This corresponds to the application of Section 3 of
|
||||||
|
/// \cite casares.21.icalp
|
||||||
|
///
|
||||||
|
/// The resulting automaton has a parity acceptance that is either
|
||||||
|
/// "min odd" or "min even", depending on the original acceptance.
|
||||||
|
/// It may uses up to n+1 colors if the input automaton has n
|
||||||
|
/// colors. Finally, it is colored, i.e., each output transition
|
||||||
|
/// has exactly one color.
|
||||||
|
SPOT_API
|
||||||
|
twa_graph_ptr zielonka_tree_transform(const const_twa_graph_ptr& aut);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -191,7 +191,7 @@
|
||||||
"</svg>\n"
|
"</svg>\n"
|
||||||
],
|
],
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<spot.zielonka_tree; proxy of <Swig Object of type 'spot::zielonka_tree *' at 0x7fefb0897c00> >"
|
"<spot.zielonka_tree; proxy of <Swig Object of type 'spot::zielonka_tree *' at 0x7efe7807fa80> >"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
|
|
@ -755,7 +755,7 @@
|
||||||
"</svg>\n"
|
"</svg>\n"
|
||||||
],
|
],
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<spot.zielonka_tree; proxy of <Swig Object of type 'spot::zielonka_tree *' at 0x7fefb10dd300> >"
|
"<spot.zielonka_tree; proxy of <Swig Object of type 'spot::zielonka_tree *' at 0x7efe7807fab0> >"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
|
|
@ -1111,7 +1111,7 @@
|
||||||
"</svg>\n"
|
"</svg>\n"
|
||||||
],
|
],
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<spot.zielonka_tree; proxy of <Swig Object of type 'spot::zielonka_tree *' at 0x7fefb083c900> >"
|
"<spot.zielonka_tree; proxy of <Swig Object of type 'spot::zielonka_tree *' at 0x7efe6a301e70> >"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
|
|
@ -1247,7 +1247,7 @@
|
||||||
"</svg>\n"
|
"</svg>\n"
|
||||||
],
|
],
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<spot.zielonka_tree; proxy of <Swig Object of type 'spot::zielonka_tree *' at 0x7fefb08a46f0> >"
|
"<spot.zielonka_tree; proxy of <Swig Object of type 'spot::zielonka_tree *' at 0x7efe6a301e10> >"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
|
|
@ -1358,7 +1358,7 @@
|
||||||
"</svg>\n"
|
"</svg>\n"
|
||||||
],
|
],
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<spot.zielonka_tree; proxy of <Swig Object of type 'spot::zielonka_tree *' at 0x7fefb08a48a0> >"
|
"<spot.zielonka_tree; proxy of <Swig Object of type 'spot::zielonka_tree *' at 0x7efe6a301840> >"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
|
|
@ -1421,7 +1421,7 @@
|
||||||
"</svg>\n"
|
"</svg>\n"
|
||||||
],
|
],
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<spot.zielonka_tree; proxy of <Swig Object of type 'spot::zielonka_tree *' at 0x7fefb08a43f0> >"
|
"<spot.zielonka_tree; proxy of <Swig Object of type 'spot::zielonka_tree *' at 0x7efe6a301300> >"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
|
|
@ -1484,7 +1484,7 @@
|
||||||
"</svg>\n"
|
"</svg>\n"
|
||||||
],
|
],
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<spot.zielonka_tree; proxy of <Swig Object of type 'spot::zielonka_tree *' at 0x7fefb08a43c0> >"
|
"<spot.zielonka_tree; proxy of <Swig Object of type 'spot::zielonka_tree *' at 0x7efe6a305780> >"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
|
|
@ -1511,10 +1511,741 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": 19,
|
||||||
"id": "interesting-seller",
|
"id": "interesting-seller",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"a = spot.automaton(\"\"\"HOA: v1 name: \"(FGp0 & ((XFp0 & F!p1) | F(Gp1 &\n",
|
||||||
|
"XG!p0))) | G(F!p0 & (XFp0 | F!p1) & F(Gp1 | G!p0))\" States: 14 Start:\n",
|
||||||
|
"0 AP: 2 \"p1\" \"p0\" Acceptance: 6 (Fin(0) & Fin(1)) | ((Fin(4)|Fin(5)) &\n",
|
||||||
|
"(Inf(2)&Inf(3))) properties: trans-labels explicit-labels trans-acc\n",
|
||||||
|
"complete properties: deterministic --BODY-- State: 0 [!0] 1 [0] 2\n",
|
||||||
|
"State: 1 [!0&!1] 1 {0 1 2 3 5} [0&!1] 3 [!0&1] 4 [0&1] 5 State: 2\n",
|
||||||
|
"[0&!1] 2 {1} [!0&1] 4 [!0&!1] 6 [0&1] 7 State: 3 [0&!1] 3 {1 3} [!0&1]\n",
|
||||||
|
"4 [!0&!1] 6 {0 1 2 3 5} [0&1] 8 State: 4 [!0&!1] 4 {1 2 3 5} [!0&1] 4\n",
|
||||||
|
"{2 4 5} [0&!1] 5 {1 3} [0&1] 5 {4} State: 5 [!0&1] 4 {2 4 5} [0&!1] 5\n",
|
||||||
|
"{1 3} [0&1] 8 {2 4} [!0&!1] 9 {1 2 3 5} State: 6 [0&!1] 3 {1 3} [!0&1]\n",
|
||||||
|
"4 [0&1] 5 [!0&!1] 10 State: 7 [!0&1] 4 [0&!1] 7 {1 3} [!0&!1] 11 [0&1]\n",
|
||||||
|
"12 {0 4} State: 8 [!0&1] 4 {2 4 5} [0&1] 5 {4} [0&!1] 8 {1 3} [!0&!1]\n",
|
||||||
|
"11 {1 3 5} State: 9 [!0&1] 4 {2 4 5} [0&!1] 5 {1 3} [0&1] 5 {4}\n",
|
||||||
|
"[!0&!1] 11 {1 3 5} State: 10 [!0&1] 4 [0&1] 8 [!0&!1] 10 {0 1 2 3 5}\n",
|
||||||
|
"[0&!1] 13 {1 2 3} State: 11 [!0&1] 4 {2 4 5} [0&!1] 8 {1 2 3} [0&1] 8\n",
|
||||||
|
"{2 4} [!0&!1] 11 {1 2 3 5} State: 12 [!0&1] 4 [0&1] 7 {0 2 4} [!0&!1]\n",
|
||||||
|
"9 [0&!1] 12 {1 3} State: 13 [!0&1] 4 [0&1] 5 [!0&!1] 10 {0 1 3 5}\n",
|
||||||
|
"[0&!1] 13 {1 3} --END--\"\"\")"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 20,
|
||||||
|
"id": "informative-mainland",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"b = spot.zielonka_tree_transform(a)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 21,
|
||||||
|
"id": "angry-comedy",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"33"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 21,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"b.num_states()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 22,
|
||||||
|
"id": "contained-combat",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"True"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 22,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"a.equivalent_to(b)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 23,
|
||||||
|
"id": "paperback-handle",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"image/svg+xml": [
|
||||||
|
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
|
||||||
|
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
|
||||||
|
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
|
||||||
|
"<!-- Generated by graphviz version 2.43.0 (0)\n",
|
||||||
|
" -->\n",
|
||||||
|
"<!-- Pages: 1 -->\n",
|
||||||
|
"<svg width=\"356pt\" height=\"233pt\"\n",
|
||||||
|
" viewBox=\"0.00 0.00 356.00 233.30\" 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 229.3)\">\n",
|
||||||
|
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-229.3 352,-229.3 352,4 -4,4\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"8\" y=\"-211.1\" font-family=\"Lato\" font-size=\"14.00\">(Fin(</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"35\" y=\"-211.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"51\" y=\"-211.1\" font-family=\"Lato\" font-size=\"14.00\">) & (Fin(</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"99\" y=\"-211.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"115\" y=\"-211.1\" font-family=\"Lato\" font-size=\"14.00\">)|Fin(</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"146\" y=\"-211.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"162\" y=\"-211.1\" font-family=\"Lato\" font-size=\"14.00\">)) & (Inf(</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"211\" y=\"-211.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"227\" y=\"-211.1\" font-family=\"Lato\" font-size=\"14.00\">)&Inf(</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"261\" y=\"-211.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"277\" y=\"-211.1\" font-family=\"Lato\" font-size=\"14.00\">))) | Inf(</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"320\" y=\"-211.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"336\" y=\"-211.1\" font-family=\"Lato\" font-size=\"14.00\">)</text>\n",
|
||||||
|
"<!-- I -->\n",
|
||||||
|
"<!-- 0 -->\n",
|
||||||
|
"<g id=\"node2\" class=\"node\">\n",
|
||||||
|
"<title>0</title>\n",
|
||||||
|
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"120.75\" cy=\"-44.3\" rx=\"18\" ry=\"18\"/>\n",
|
||||||
|
"<text text-anchor=\"middle\" x=\"120.75\" y=\"-40.6\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- I->0 -->\n",
|
||||||
|
"<g id=\"edge1\" class=\"edge\">\n",
|
||||||
|
"<title>I->0</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M65.9,-44.3C67.54,-44.3 81.9,-44.3 95.38,-44.3\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"102.69,-44.3 95.69,-47.45 99.19,-44.3 95.69,-44.3 95.69,-44.3 95.69,-44.3 99.19,-44.3 95.69,-41.15 102.69,-44.3 102.69,-44.3\"/>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 0->0 -->\n",
|
||||||
|
"<g id=\"edge2\" class=\"edge\">\n",
|
||||||
|
"<title>0->0</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M117.51,-62.08C116.96,-71.62 118.04,-80.3 120.75,-80.3 122.74,-80.3 123.85,-75.62 124.08,-69.35\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"123.99,-62.08 127.23,-69.04 124.03,-65.58 124.08,-69.08 124.08,-69.08 124.08,-69.08 124.03,-65.58 120.93,-69.12 123.99,-62.08 123.99,-62.08\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"94.25\" y=\"-98.1\" font-family=\"Lato\" font-size=\"14.00\">!p0 & p1</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"104.75\" y=\"-84.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"120.75\" y=\"-84.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 0->0 -->\n",
|
||||||
|
"<g id=\"edge3\" class=\"edge\">\n",
|
||||||
|
"<title>0->0</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M115.69,-61.9C112.31,-82.43 114,-108.3 120.75,-108.3 126.74,-108.3 128.74,-87.96 126.76,-69.03\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"125.81,-61.9 129.86,-68.42 126.28,-65.37 126.74,-68.83 126.74,-68.83 126.74,-68.83 126.28,-65.37 123.62,-69.25 125.81,-61.9 125.81,-61.9\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"92.25\" y=\"-126.1\" font-family=\"Lato\" font-size=\"14.00\">!p0 & !p1</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"96.75\" y=\"-112.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"112.75\" y=\"-112.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"128.75\" y=\"-112.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 1 -->\n",
|
||||||
|
"<g id=\"node3\" class=\"node\">\n",
|
||||||
|
"<title>1</title>\n",
|
||||||
|
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"256.75\" cy=\"-44.3\" rx=\"18\" ry=\"18\"/>\n",
|
||||||
|
"<text text-anchor=\"middle\" x=\"256.75\" y=\"-40.6\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 0->1 -->\n",
|
||||||
|
"<g id=\"edge4\" class=\"edge\">\n",
|
||||||
|
"<title>0->1</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M133.35,-57.44C139.59,-63.52 147.84,-70.09 156.75,-73.3 183.51,-82.95 193.99,-82.95 220.75,-73.3 227.29,-70.94 233.48,-66.77 238.78,-62.32\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"244.15,-57.44 241.08,-64.48 241.56,-59.79 238.97,-62.14 238.97,-62.14 238.97,-62.14 241.56,-59.79 236.85,-59.81 244.15,-57.44 244.15,-57.44\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"162.25\" y=\"-84.1\" font-family=\"Lato\" font-size=\"14.00\">p0 & !p1</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 0->1 -->\n",
|
||||||
|
"<g id=\"edge5\" class=\"edge\">\n",
|
||||||
|
"<title>0->1</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M138.82,-42.54C144.52,-42.04 150.9,-41.55 156.75,-41.3 185.17,-40.09 192.33,-40.09 220.75,-41.3 224.22,-41.45 227.88,-41.68 231.48,-41.95\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"238.68,-42.54 231.44,-45.11 235.19,-42.26 231.7,-41.97 231.7,-41.97 231.7,-41.97 235.19,-42.26 231.96,-38.83 238.68,-42.54 238.68,-42.54\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"164.25\" y=\"-59.1\" font-family=\"Lato\" font-size=\"14.00\">p0 & p1</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"172.75\" y=\"-45.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"188.75\" y=\"-45.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 1->0 -->\n",
|
||||||
|
"<g id=\"edge6\" class=\"edge\">\n",
|
||||||
|
"<title>1->0</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M245.96,-29.56C239.78,-21.64 231.03,-12.64 220.75,-8.3 194.55,2.77 182.95,2.77 156.75,-8.3 148.88,-11.63 141.91,-17.68 136.3,-23.89\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"131.54,-29.56 133.63,-22.17 133.79,-26.88 136.04,-24.2 136.04,-24.2 136.04,-24.2 133.79,-26.88 138.45,-26.22 131.54,-29.56 131.54,-29.56\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"160.25\" y=\"-26.1\" font-family=\"Lato\" font-size=\"14.00\">!p0 & !p1</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"156.75\" y=\"-12.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"172.75\" y=\"-12.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"188.75\" y=\"-12.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"204.75\" y=\"-12.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 1->1 -->\n",
|
||||||
|
"<g id=\"edge7\" class=\"edge\">\n",
|
||||||
|
"<title>1->1</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M252.68,-62.08C251.98,-71.62 253.34,-80.3 256.75,-80.3 259.25,-80.3 260.65,-75.62 260.94,-69.35\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"260.82,-62.08 264.09,-69.03 260.88,-65.58 260.94,-69.08 260.94,-69.08 260.94,-69.08 260.88,-65.58 257.79,-69.13 260.82,-62.08 260.82,-62.08\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"230.25\" y=\"-99.1\" font-family=\"Lato\" font-size=\"14.00\">p0 & !p1</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"248.75\" y=\"-84.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 1->1 -->\n",
|
||||||
|
"<g id=\"edge8\" class=\"edge\">\n",
|
||||||
|
"<title>1->1</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M250.58,-61.22C246.06,-82.45 248.12,-110.3 256.75,-110.3 264.47,-110.3 266.93,-88.02 264.13,-68.12\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"262.92,-61.22 267.23,-67.57 263.53,-64.67 264.13,-68.12 264.13,-68.12 264.13,-68.12 263.53,-64.67 261.03,-68.66 262.92,-61.22 262.92,-61.22\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"230.25\" y=\"-128.1\" font-family=\"Lato\" font-size=\"14.00\">!p0 & p1</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"240.75\" y=\"-114.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"256.75\" y=\"-114.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 1->1 -->\n",
|
||||||
|
"<g id=\"edge9\" class=\"edge\">\n",
|
||||||
|
"<title>1->1</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M249.23,-61.02C240.3,-91.2 242.8,-138.3 256.75,-138.3 269.66,-138.3 272.77,-97.93 266.07,-68\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"264.27,-61.02 269.07,-67.01 265.14,-64.41 266.02,-67.8 266.02,-67.8 266.02,-67.8 265.14,-64.41 262.97,-68.59 264.27,-61.02 264.27,-61.02\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"232.25\" y=\"-156.1\" font-family=\"Lato\" font-size=\"14.00\">p0 & p1</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"232.75\" y=\"-142.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"248.75\" y=\"-142.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"264.75\" y=\"-142.1\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"</svg>\n"
|
||||||
|
],
|
||||||
|
"text/plain": [
|
||||||
|
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7efe6a34b960> >"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 23,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"c = spot.automaton(\"\"\"\n",
|
||||||
|
"HOA: v1\n",
|
||||||
|
"States: 2\n",
|
||||||
|
"Start: 0\n",
|
||||||
|
"AP: 2 \"p1\" \"p0\"\n",
|
||||||
|
"Acceptance: 5 (Fin(0) & (Fin(3)|Fin(4)) & (Inf(1)&Inf(2))) | Inf(3)\n",
|
||||||
|
"properties: trans-labels explicit-labels trans-acc complete\n",
|
||||||
|
"properties: deterministic stutter-invariant\n",
|
||||||
|
"--BODY--\n",
|
||||||
|
"State: 0\n",
|
||||||
|
"[0&!1] 0 {2 3}\n",
|
||||||
|
"[!0&!1] 0 {2 3 4}\n",
|
||||||
|
"[!0&1] 1\n",
|
||||||
|
"[0&1] 1 {2 4}\n",
|
||||||
|
"State: 1\n",
|
||||||
|
"[!0&!1] 0 {0 2 3 4}\n",
|
||||||
|
"[!0&1] 1 {1}\n",
|
||||||
|
"[0&!1] 1 {2 3}\n",
|
||||||
|
"[0&1] 1 {1 2 4}\n",
|
||||||
|
"--END--\n",
|
||||||
|
"\"\"\"); c"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 24,
|
||||||
|
"id": "tired-webcam",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"image/svg+xml": [
|
||||||
|
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
|
||||||
|
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
|
||||||
|
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
|
||||||
|
"<!-- Generated by graphviz version 2.43.0 (0)\n",
|
||||||
|
" -->\n",
|
||||||
|
"<!-- Pages: 1 -->\n",
|
||||||
|
"<svg width=\"366pt\" height=\"238pt\"\n",
|
||||||
|
" viewBox=\"0.00 0.00 365.50 238.16\" 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 234.16)\">\n",
|
||||||
|
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-234.16 361.5,-234.16 361.5,4 -4,4\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"34.25\" y=\"-215.96\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"55.25\" y=\"-215.96\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"71.25\" y=\"-215.96\" font-family=\"Lato\" font-size=\"14.00\">) | (Fin(</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"113.25\" y=\"-215.96\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"129.25\" y=\"-215.96\" font-family=\"Lato\" font-size=\"14.00\">) & (Inf(</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"175.25\" y=\"-215.96\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"191.25\" y=\"-215.96\" font-family=\"Lato\" font-size=\"14.00\">) | (Fin(</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"233.25\" y=\"-215.96\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"249.25\" y=\"-215.96\" font-family=\"Lato\" font-size=\"14.00\">) & Inf(</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"291.25\" y=\"-215.96\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"307.25\" y=\"-215.96\" font-family=\"Lato\" font-size=\"14.00\">))))</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"121.75\" y=\"-201.96\" font-family=\"Lato\" font-size=\"14.00\">[parity min even 5]</text>\n",
|
||||||
|
"<!-- I -->\n",
|
||||||
|
"<!-- 0 -->\n",
|
||||||
|
"<g id=\"node2\" class=\"node\">\n",
|
||||||
|
"<title>0</title>\n",
|
||||||
|
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-44.16\" rx=\"18\" ry=\"18\"/>\n",
|
||||||
|
"<text text-anchor=\"middle\" x=\"56\" y=\"-40.46\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- I->0 -->\n",
|
||||||
|
"<g id=\"edge1\" class=\"edge\">\n",
|
||||||
|
"<title>I->0</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-44.16C2.79,-44.16 17.15,-44.16 30.63,-44.16\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-44.16 30.94,-47.31 34.44,-44.16 30.94,-44.16 30.94,-44.16 30.94,-44.16 34.44,-44.16 30.94,-41.01 37.94,-44.16 37.94,-44.16\"/>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 0->0 -->\n",
|
||||||
|
"<g id=\"edge2\" class=\"edge\">\n",
|
||||||
|
"<title>0->0</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M52.76,-61.94C52.21,-71.47 53.29,-80.16 56,-80.16 57.99,-80.16 59.1,-75.48 59.33,-69.21\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"59.24,-61.94 62.48,-68.9 59.28,-65.44 59.33,-68.94 59.33,-68.94 59.33,-68.94 59.28,-65.44 56.18,-68.98 59.24,-61.94 59.24,-61.94\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"29.5\" y=\"-98.96\" font-family=\"Lato\" font-size=\"14.00\">!p0 & p1</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"48\" y=\"-83.96\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 0->0 -->\n",
|
||||||
|
"<g id=\"edge3\" class=\"edge\">\n",
|
||||||
|
"<title>0->0</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M50.99,-61.74C47.55,-82.88 49.21,-110.16 56,-110.16 62.04,-110.16 64.03,-88.52 61.96,-68.85\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"61.01,-61.74 65.06,-68.26 61.47,-65.21 61.93,-68.68 61.93,-68.68 61.93,-68.68 61.47,-65.21 58.81,-69.09 61.01,-61.74 61.01,-61.74\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"27.5\" y=\"-128.96\" font-family=\"Lato\" font-size=\"14.00\">!p0 & !p1</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"48\" y=\"-113.96\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 1 -->\n",
|
||||||
|
"<g id=\"node3\" class=\"node\">\n",
|
||||||
|
"<title>1</title>\n",
|
||||||
|
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"195.5\" cy=\"-71.16\" rx=\"18\" ry=\"18\"/>\n",
|
||||||
|
"<text text-anchor=\"middle\" x=\"195.5\" y=\"-67.46\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 0->1 -->\n",
|
||||||
|
"<g id=\"edge4\" class=\"edge\">\n",
|
||||||
|
"<title>0->1</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M62.13,-61.3C67.26,-75.07 76.64,-93.49 92,-102.16 114.06,-114.61 124.79,-109.62 149,-102.16 158.75,-99.15 168.29,-93.26 176.09,-87.41\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"181.69,-83 178.14,-89.81 178.94,-85.17 176.19,-87.33 176.19,-87.33 176.19,-87.33 178.94,-85.17 174.24,-84.86 181.69,-83 181.69,-83\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"94\" y=\"-127.96\" font-family=\"Lato\" font-size=\"14.00\">p0 & !p1</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"112.5\" y=\"-112.96\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#33a02c\">❹</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 0->1 -->\n",
|
||||||
|
"<g id=\"edge5\" class=\"edge\">\n",
|
||||||
|
"<title>0->1</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M73.86,-47.47C98.09,-52.23 142.86,-61.02 170.52,-66.45\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"177.5,-67.82 170.03,-69.56 174.07,-67.15 170.63,-66.47 170.63,-66.47 170.63,-66.47 174.07,-67.15 171.24,-63.38 177.5,-67.82 177.5,-67.82\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"96\" y=\"-79.96\" font-family=\"Lato\" font-size=\"14.00\">p0 & p1</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"112.5\" y=\"-64.96\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 1->0 -->\n",
|
||||||
|
"<g id=\"edge6\" class=\"edge\">\n",
|
||||||
|
"<title>1->0</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M186.44,-55.56C178.77,-42.58 165.9,-25.02 149,-17.16 126.03,-6.48 115.98,-8.99 92,-17.16 85.84,-19.26 79.92,-22.93 74.76,-26.9\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"69.07,-31.63 72.44,-24.73 71.77,-29.39 74.46,-27.15 74.46,-27.15 74.46,-27.15 71.77,-29.39 76.47,-29.58 69.07,-31.63 69.07,-31.63\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"92\" y=\"-35.96\" font-family=\"Lato\" font-size=\"14.00\">!p0 & !p1</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"112.5\" y=\"-20.96\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 1->1 -->\n",
|
||||||
|
"<g id=\"edge8\" class=\"edge\">\n",
|
||||||
|
"<title>1->1</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M183.74,-85.2C179.35,-96.07 183.27,-107.16 195.5,-107.16 205.06,-107.16 209.54,-100.39 208.95,-92.25\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"207.26,-85.2 211.95,-91.27 208.07,-88.6 208.89,-92.01 208.89,-92.01 208.89,-92.01 208.07,-88.6 205.83,-92.74 207.26,-85.2 207.26,-85.2\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"169\" y=\"-125.96\" font-family=\"Lato\" font-size=\"14.00\">!p0 & p1</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"187.5\" y=\"-110.96\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 2 -->\n",
|
||||||
|
"<g id=\"node4\" class=\"node\">\n",
|
||||||
|
"<title>2</title>\n",
|
||||||
|
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"331\" cy=\"-71.16\" rx=\"18\" ry=\"18\"/>\n",
|
||||||
|
"<text text-anchor=\"middle\" x=\"331\" y=\"-67.46\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 1->2 -->\n",
|
||||||
|
"<g id=\"edge7\" class=\"edge\">\n",
|
||||||
|
"<title>1->2</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M200.35,-88.7C205.8,-108.8 217.92,-140.82 242,-155.16 262.24,-167.21 275.4,-168.23 295,-155.16 314.55,-142.13 323.2,-115.88 327.01,-96.18\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"328.21,-89.25 330.12,-96.69 327.61,-92.7 327.02,-96.15 327.02,-96.15 327.02,-96.15 327.61,-92.7 323.91,-95.61 328.21,-89.25 328.21,-89.25\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"242\" y=\"-182.96\" font-family=\"Lato\" font-size=\"14.00\">p0 & !p1</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"260.5\" y=\"-167.96\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 1->2 -->\n",
|
||||||
|
"<g id=\"edge9\" class=\"edge\">\n",
|
||||||
|
"<title>1->2</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M209.31,-83C217.87,-90.07 229.76,-98.39 242,-102.16 264.51,-109.1 272.97,-110.51 295,-102.16 301.94,-99.53 308.4,-94.82 313.82,-89.85\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"318.88,-84.86 316.1,-92.02 316.39,-87.32 313.89,-89.78 313.89,-89.78 313.89,-89.78 316.39,-87.32 311.68,-87.53 318.88,-84.86 318.88,-84.86\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"244\" y=\"-125.96\" font-family=\"Lato\" font-size=\"14.00\">p0 & p1</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"260.5\" y=\"-110.96\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 2->0 -->\n",
|
||||||
|
"<g id=\"edge10\" class=\"edge\">\n",
|
||||||
|
"<title>2->0</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M322.72,-54.68C316.89,-43.56 307.6,-29.6 295,-22.16 238.74,11.05 214.22,-8.94 149,-5.16 123.71,-3.69 115.13,5.16 92,-5.16 83.43,-8.98 76.09,-16.05 70.37,-23.14\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"65.96,-29.02 67.64,-21.53 68.06,-26.22 70.16,-23.42 70.16,-23.42 70.16,-23.42 68.06,-26.22 72.68,-25.31 65.96,-29.02 65.96,-29.02\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"167\" y=\"-23.96\" font-family=\"Lato\" font-size=\"14.00\">!p0 & !p1</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"187.5\" y=\"-8.96\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 2->1 -->\n",
|
||||||
|
"<g id=\"edge12\" class=\"edge\">\n",
|
||||||
|
"<title>2->1</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M312.93,-69.4C307.23,-68.89 300.85,-68.41 295,-68.16 271.47,-67.15 265.54,-67.38 242,-68.16 235.14,-68.39 227.72,-68.8 220.89,-69.25\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"213.77,-69.75 220.53,-66.12 217.26,-69.51 220.75,-69.26 220.75,-69.26 220.75,-69.26 217.26,-69.51 220.97,-72.41 213.77,-69.75 213.77,-69.75\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"242\" y=\"-86.96\" font-family=\"Lato\" font-size=\"14.00\">!p0 & p1</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"260.5\" y=\"-71.96\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 2->1 -->\n",
|
||||||
|
"<g id=\"edge13\" class=\"edge\">\n",
|
||||||
|
"<title>2->1</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M320.67,-56.01C314.54,-47.57 305.68,-37.84 295,-33.16 273.43,-23.7 264.14,-25.13 242,-33.16 230.99,-37.15 220.79,-45.1 212.84,-52.7\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"207.72,-57.85 210.42,-50.66 210.18,-55.37 212.65,-52.89 212.65,-52.89 212.65,-52.89 210.18,-55.37 214.89,-55.11 207.72,-57.85 207.72,-57.85\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"244\" y=\"-51.96\" font-family=\"Lato\" font-size=\"14.00\">p0 & p1</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"260.5\" y=\"-36.96\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 2->2 -->\n",
|
||||||
|
"<g id=\"edge11\" class=\"edge\">\n",
|
||||||
|
"<title>2->2</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M320.63,-85.95C317.25,-96.58 320.71,-107.16 331,-107.16 338.88,-107.16 342.75,-100.96 342.62,-93.28\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"341.37,-85.95 345.65,-92.32 341.96,-89.4 342.55,-92.85 342.55,-92.85 342.55,-92.85 341.96,-89.4 339.44,-93.38 341.37,-85.95 341.37,-85.95\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"304.5\" y=\"-125.96\" font-family=\"Lato\" font-size=\"14.00\">p0 & !p1</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"323\" y=\"-110.96\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"</svg>\n"
|
||||||
|
],
|
||||||
|
"text/plain": [
|
||||||
|
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7efe6a34b540> >"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 24,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"d = spot.zielonka_tree_transform(c); d"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 25,
|
||||||
|
"id": "funny-taylor",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"True"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 25,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"c.equivalent_to(d)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 26,
|
||||||
|
"id": "liable-update",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"image/svg+xml": [
|
||||||
|
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
|
||||||
|
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
|
||||||
|
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
|
||||||
|
"<!-- Generated by graphviz version 2.43.0 (0)\n",
|
||||||
|
" -->\n",
|
||||||
|
"<!-- Pages: 1 -->\n",
|
||||||
|
"<svg width=\"194pt\" height=\"207pt\"\n",
|
||||||
|
" viewBox=\"0.00 0.00 194.00 206.51\" 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 202.51)\">\n",
|
||||||
|
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-202.51 190,-202.51 190,4 -4,4\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"15\" y=\"-184.31\" font-family=\"Lato\" font-size=\"14.00\">Inf(</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"36\" y=\"-184.31\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"52\" y=\"-184.31\" font-family=\"Lato\" font-size=\"14.00\">) & (Fin(</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"100\" y=\"-184.31\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"116\" y=\"-184.31\" font-family=\"Lato\" font-size=\"14.00\">)|Fin(</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"147\" y=\"-184.31\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"163\" y=\"-184.31\" font-family=\"Lato\" font-size=\"14.00\">))</text>\n",
|
||||||
|
"<!-- I -->\n",
|
||||||
|
"<!-- 0 -->\n",
|
||||||
|
"<g id=\"node2\" class=\"node\">\n",
|
||||||
|
"<title>0</title>\n",
|
||||||
|
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-63.51\" rx=\"18\" ry=\"18\"/>\n",
|
||||||
|
"<text text-anchor=\"middle\" x=\"56\" y=\"-59.81\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- I->0 -->\n",
|
||||||
|
"<g id=\"edge1\" class=\"edge\">\n",
|
||||||
|
"<title>I->0</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-63.51C2.79,-63.51 17.15,-63.51 30.63,-63.51\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-63.51 30.94,-66.66 34.44,-63.51 30.94,-63.51 30.94,-63.51 30.94,-63.51 34.44,-63.51 30.94,-60.36 37.94,-63.51 37.94,-63.51\"/>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 0->0 -->\n",
|
||||||
|
"<g id=\"edge2\" class=\"edge\">\n",
|
||||||
|
"<title>0->0</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M52.76,-81.29C52.21,-90.82 53.29,-99.51 56,-99.51 57.99,-99.51 59.1,-94.83 59.33,-88.56\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"59.24,-81.29 62.48,-88.25 59.28,-84.79 59.33,-88.29 59.33,-88.29 59.33,-88.29 59.28,-84.79 56.18,-88.33 59.24,-81.29 59.24,-81.29\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"36\" y=\"-118.31\" font-family=\"Lato\" font-size=\"14.00\">!a & !b</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"48\" y=\"-103.31\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 0->0 -->\n",
|
||||||
|
"<g id=\"edge3\" class=\"edge\">\n",
|
||||||
|
"<title>0->0</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M50.99,-81.09C47.55,-102.23 49.21,-129.51 56,-129.51 62.04,-129.51 64.03,-107.87 61.96,-88.2\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"61.01,-81.09 65.06,-87.61 61.47,-84.56 61.93,-88.03 61.93,-88.03 61.93,-88.03 61.47,-84.56 58.81,-88.44 61.01,-81.09 61.01,-81.09\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"38\" y=\"-147.31\" font-family=\"Lato\" font-size=\"14.00\">a & !b</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"40\" y=\"-133.31\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"56\" y=\"-133.31\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 1 -->\n",
|
||||||
|
"<g id=\"node3\" class=\"node\">\n",
|
||||||
|
"<title>1</title>\n",
|
||||||
|
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"168\" cy=\"-63.51\" rx=\"18\" ry=\"18\"/>\n",
|
||||||
|
"<text text-anchor=\"middle\" x=\"168\" y=\"-59.81\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 0->1 -->\n",
|
||||||
|
"<g id=\"edge4\" class=\"edge\">\n",
|
||||||
|
"<title>0->1</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M64.12,-80.11C69.87,-91.22 79.13,-104.97 92,-111.51 107.85,-119.57 116.15,-119.57 132,-111.51 142.56,-106.14 150.69,-95.93 156.44,-86.3\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"159.88,-80.11 159.23,-87.76 158.18,-83.17 156.48,-86.23 156.48,-86.23 156.48,-86.23 158.18,-83.17 153.73,-84.7 159.88,-80.11 159.88,-80.11\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"94\" y=\"-136.31\" font-family=\"Lato\" font-size=\"14.00\">!a & b</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"104\" y=\"-121.31\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 0->1 -->\n",
|
||||||
|
"<g id=\"edge5\" class=\"edge\">\n",
|
||||||
|
"<title>0->1</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M74.19,-63.51C92.59,-63.51 121.95,-63.51 142.71,-63.51\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"149.93,-63.51 142.93,-66.66 146.43,-63.51 142.93,-63.51 142.93,-63.51 142.93,-63.51 146.43,-63.51 142.93,-60.36 149.93,-63.51 149.93,-63.51\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"96\" y=\"-81.31\" font-family=\"Lato\" font-size=\"14.00\">a & b</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"96\" y=\"-67.31\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"112\" y=\"-67.31\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 1->0 -->\n",
|
||||||
|
"<g id=\"edge6\" class=\"edge\">\n",
|
||||||
|
"<title>1->0</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M152.69,-53.64C146.6,-50.02 139.24,-46.35 132,-44.51 114.77,-40.13 109.23,-40.13 92,-44.51 87.14,-45.74 82.22,-47.81 77.67,-50.13\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"71.31,-53.64 75.91,-47.5 74.37,-51.95 77.44,-50.25 77.44,-50.25 77.44,-50.25 74.37,-51.95 78.96,-53.01 71.31,-53.64 71.31,-53.64\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"92\" y=\"-48.31\" font-family=\"Lato\" font-size=\"14.00\">!a & !b</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 1->0 -->\n",
|
||||||
|
"<g id=\"edge7\" class=\"edge\">\n",
|
||||||
|
"<title>1->0</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M161.68,-46.39C156.48,-32.88 147.1,-14.96 132,-6.51 116.49,2.17 107.51,2.17 92,-6.51 79.26,-13.64 70.59,-27.51 65.07,-39.79\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"62.32,-46.39 62.1,-38.71 63.66,-43.16 65.01,-39.93 65.01,-39.93 65.01,-39.93 63.66,-43.16 67.92,-41.14 62.32,-46.39 62.32,-46.39\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"94\" y=\"-25.31\" font-family=\"Lato\" font-size=\"14.00\">a & !b</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"104\" y=\"-10.31\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 1->1 -->\n",
|
||||||
|
"<g id=\"edge8\" class=\"edge\">\n",
|
||||||
|
"<title>1->1</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M163,-80.92C162.07,-90.6 163.73,-99.51 168,-99.51 171.13,-99.51 172.86,-94.7 173.19,-88.32\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"173,-80.92 176.33,-87.83 173.09,-84.42 173.18,-87.92 173.18,-87.92 173.18,-87.92 173.09,-84.42 170.03,-88 173,-80.92 173,-80.92\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"150\" y=\"-118.31\" font-family=\"Lato\" font-size=\"14.00\">!a & b</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"160\" y=\"-103.31\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 1->1 -->\n",
|
||||||
|
"<g id=\"edge9\" class=\"edge\">\n",
|
||||||
|
"<title>1->1</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M160.46,-80.11C154.77,-101.37 157.28,-129.51 168,-129.51 177.59,-129.51 180.61,-107 177.06,-87.02\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"175.54,-80.11 180.12,-86.26 176.29,-83.52 177.05,-86.94 177.05,-86.94 177.05,-86.94 176.29,-83.52 173.97,-87.62 175.54,-80.11 175.54,-80.11\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"152\" y=\"-147.31\" font-family=\"Lato\" font-size=\"14.00\">a & b</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"152\" y=\"-133.31\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"168\" y=\"-133.31\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"</svg>\n"
|
||||||
|
],
|
||||||
|
"text/plain": [
|
||||||
|
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7efe6a301ed0> >"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"image/svg+xml": [
|
||||||
|
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
|
||||||
|
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
|
||||||
|
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
|
||||||
|
"<!-- Generated by graphviz version 2.43.0 (0)\n",
|
||||||
|
" -->\n",
|
||||||
|
"<!-- Pages: 1 -->\n",
|
||||||
|
"<svg width=\"306pt\" height=\"283pt\"\n",
|
||||||
|
" viewBox=\"0.00 0.00 306.00 283.28\" 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 279.28)\">\n",
|
||||||
|
"<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-279.28 302,-279.28 302,4 -4,4\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"34.5\" y=\"-261.08\" font-family=\"Lato\" font-size=\"14.00\">Fin(</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"57.5\" y=\"-261.08\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"73.5\" y=\"-261.08\" font-family=\"Lato\" font-size=\"14.00\">) & (Inf(</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"119.5\" y=\"-261.08\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"135.5\" y=\"-261.08\" font-family=\"Lato\" font-size=\"14.00\">) | (Fin(</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"177.5\" y=\"-261.08\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"193.5\" y=\"-261.08\" font-family=\"Lato\" font-size=\"14.00\">) & Inf(</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"235.5\" y=\"-261.08\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"251.5\" y=\"-261.08\" font-family=\"Lato\" font-size=\"14.00\">)))</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"95\" y=\"-247.08\" font-family=\"Lato\" font-size=\"14.00\">[parity min odd 4]</text>\n",
|
||||||
|
"<!-- I -->\n",
|
||||||
|
"<!-- 0 -->\n",
|
||||||
|
"<g id=\"node2\" class=\"node\">\n",
|
||||||
|
"<title>0</title>\n",
|
||||||
|
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"56\" cy=\"-48.28\" rx=\"18\" ry=\"18\"/>\n",
|
||||||
|
"<text text-anchor=\"middle\" x=\"56\" y=\"-44.58\" font-family=\"Lato\" font-size=\"14.00\">0</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- I->0 -->\n",
|
||||||
|
"<g id=\"edge1\" class=\"edge\">\n",
|
||||||
|
"<title>I->0</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M1.15,-48.28C2.79,-48.28 17.15,-48.28 30.63,-48.28\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"37.94,-48.28 30.94,-51.43 34.44,-48.28 30.94,-48.28 30.94,-48.28 30.94,-48.28 34.44,-48.28 30.94,-45.13 37.94,-48.28 37.94,-48.28\"/>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 0->0 -->\n",
|
||||||
|
"<g id=\"edge2\" class=\"edge\">\n",
|
||||||
|
"<title>0->0</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M52.76,-66.07C52.21,-75.6 53.29,-84.28 56,-84.28 57.99,-84.28 59.1,-79.6 59.33,-73.34\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"59.24,-66.07 62.48,-73.02 59.28,-69.57 59.33,-73.07 59.33,-73.07 59.33,-73.07 59.28,-69.57 56.18,-73.11 59.24,-66.07 59.24,-66.07\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"36\" y=\"-103.08\" font-family=\"Lato\" font-size=\"14.00\">!a & !b</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"48\" y=\"-88.08\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 0->0 -->\n",
|
||||||
|
"<g id=\"edge3\" class=\"edge\">\n",
|
||||||
|
"<title>0->0</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M50.99,-65.86C47.55,-87 49.21,-114.28 56,-114.28 62.04,-114.28 64.03,-92.64 61.96,-72.97\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"61.01,-65.86 65.06,-72.38 61.47,-69.33 61.93,-72.8 61.93,-72.8 61.93,-72.8 61.47,-69.33 58.81,-73.22 61.01,-65.86 61.01,-65.86\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"38\" y=\"-133.08\" font-family=\"Lato\" font-size=\"14.00\">a & !b</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"48\" y=\"-118.08\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 1 -->\n",
|
||||||
|
"<g id=\"node3\" class=\"node\">\n",
|
||||||
|
"<title>1</title>\n",
|
||||||
|
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"166\" cy=\"-118.28\" rx=\"18\" ry=\"18\"/>\n",
|
||||||
|
"<text text-anchor=\"middle\" x=\"166\" y=\"-114.58\" font-family=\"Lato\" font-size=\"14.00\">1</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 0->1 -->\n",
|
||||||
|
"<g id=\"edge4\" class=\"edge\">\n",
|
||||||
|
"<title>0->1</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M65.05,-64.23C71.13,-74.75 80.39,-88.05 92,-96.28 106.48,-106.55 125.81,-112.09 140.94,-115.05\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"148,-116.3 140.55,-118.18 144.55,-115.69 141.1,-115.08 141.1,-115.08 141.1,-115.08 144.55,-115.69 141.66,-111.98 148,-116.3 148,-116.3\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"92\" y=\"-130.08\" font-family=\"Lato\" font-size=\"14.00\">!a & b</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"102\" y=\"-115.08\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 0->1 -->\n",
|
||||||
|
"<g id=\"edge5\" class=\"edge\">\n",
|
||||||
|
"<title>0->1</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M74.18,-48.05C89.5,-48.63 111.93,-51.51 128,-62.28 140.08,-70.39 149.18,-83.91 155.33,-95.64\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"158.45,-101.92 152.52,-97.05 156.89,-98.79 155.34,-95.65 155.34,-95.65 155.34,-95.65 156.89,-98.79 158.16,-94.25 158.45,-101.92 158.45,-101.92\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"94\" y=\"-81.08\" font-family=\"Lato\" font-size=\"14.00\">a & b</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"102\" y=\"-66.08\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 1->1 -->\n",
|
||||||
|
"<g id=\"edge8\" class=\"edge\">\n",
|
||||||
|
"<title>1->1</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M161,-135.69C160.07,-145.37 161.73,-154.28 166,-154.28 169.13,-154.28 170.86,-149.48 171.19,-143.09\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"171,-135.69 174.33,-142.61 171.09,-139.19 171.18,-142.69 171.18,-142.69 171.18,-142.69 171.09,-139.19 168.03,-142.77 171,-135.69 171,-135.69\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"148\" y=\"-173.08\" font-family=\"Lato\" font-size=\"14.00\">!a & b</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"158\" y=\"-158.08\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 1->1 -->\n",
|
||||||
|
"<g id=\"edge9\" class=\"edge\">\n",
|
||||||
|
"<title>1->1</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M158.46,-134.88C152.77,-156.15 155.28,-184.28 166,-184.28 175.59,-184.28 178.61,-161.77 175.06,-141.8\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"173.54,-134.88 178.12,-141.04 174.29,-138.3 175.05,-141.72 175.05,-141.72 175.05,-141.72 174.29,-138.3 171.97,-142.39 173.54,-134.88 173.54,-134.88\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"150\" y=\"-203.08\" font-family=\"Lato\" font-size=\"14.00\">a & b</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"158\" y=\"-188.08\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 2 -->\n",
|
||||||
|
"<g id=\"node4\" class=\"node\">\n",
|
||||||
|
"<title>2</title>\n",
|
||||||
|
"<ellipse fill=\"#ffffaa\" stroke=\"black\" cx=\"280\" cy=\"-91.28\" rx=\"18\" ry=\"18\"/>\n",
|
||||||
|
"<text text-anchor=\"middle\" x=\"280\" y=\"-87.58\" font-family=\"Lato\" font-size=\"14.00\">2</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 1->2 -->\n",
|
||||||
|
"<g id=\"edge6\" class=\"edge\">\n",
|
||||||
|
"<title>1->2</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M169.16,-136.05C172.65,-156.05 181.58,-187.66 204,-202.28 218.89,-212 229.66,-212.8 244,-202.28 270.66,-182.74 277.54,-142.83 279.03,-116.58\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"279.32,-109.56 282.18,-116.69 279.18,-113.06 279.03,-116.56 279.03,-116.56 279.03,-116.56 279.18,-113.06 275.89,-116.43 279.32,-109.56 279.32,-109.56\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"204\" y=\"-228.08\" font-family=\"Lato\" font-size=\"14.00\">!a & !b</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"216\" y=\"-213.08\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 1->2 -->\n",
|
||||||
|
"<g id=\"edge7\" class=\"edge\">\n",
|
||||||
|
"<title>1->2</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M178.58,-131.68C185.25,-138.35 194.23,-145.73 204,-149.28 220.71,-155.36 228.52,-158.02 244,-149.28 256.96,-141.97 265.66,-127.71 271.15,-115.16\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"273.87,-108.42 274.17,-116.09 272.56,-111.67 271.25,-114.91 271.25,-114.91 271.25,-114.91 272.56,-111.67 268.33,-113.73 273.87,-108.42 273.87,-108.42\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"206\" y=\"-173.08\" font-family=\"Lato\" font-size=\"14.00\">a & !b</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"216\" y=\"-158.08\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 2->0 -->\n",
|
||||||
|
"<g id=\"edge10\" class=\"edge\">\n",
|
||||||
|
"<title>2->0</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M269.08,-76.84C262.85,-69.02 254.1,-60.02 244,-55.28 190.31,-30.11 118.12,-37.27 81.11,-43.46\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"73.76,-44.75 80.11,-40.44 77.21,-44.15 80.65,-43.54 80.65,-43.54 80.65,-43.54 77.21,-44.15 81.2,-46.64 73.76,-44.75 73.76,-44.75\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"146\" y=\"-58.08\" font-family=\"Lato\" font-size=\"14.00\">!a & !b</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"158\" y=\"-43.08\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 2->0 -->\n",
|
||||||
|
"<g id=\"edge11\" class=\"edge\">\n",
|
||||||
|
"<title>2->0</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M271.08,-75.57C264.83,-64.25 255.29,-49.13 244,-38.28 222.28,-17.43 215,-11.36 186,-3.28 146.61,7.68 101.77,-16.53 76.69,-33.51\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"70.75,-37.65 74.69,-31.06 73.62,-35.65 76.49,-33.65 76.49,-33.65 76.49,-33.65 73.62,-35.65 78.29,-36.23 70.75,-37.65 70.75,-37.65\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"148\" y=\"-22.08\" font-family=\"Lato\" font-size=\"14.00\">a & !b</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"158\" y=\"-7.08\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 2->1 -->\n",
|
||||||
|
"<g id=\"edge12\" class=\"edge\">\n",
|
||||||
|
"<title>2->1</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M262.2,-95.33C243.26,-99.9 212.33,-107.36 190.89,-112.53\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"184.01,-114.18 190.08,-109.48 187.41,-113.36 190.82,-112.54 190.82,-112.54 190.82,-112.54 187.41,-113.36 191.55,-115.61 184.01,-114.18 184.01,-114.18\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"206\" y=\"-127.08\" font-family=\"Lato\" font-size=\"14.00\">!a & b</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"216\" y=\"-112.08\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"<!-- 2->1 -->\n",
|
||||||
|
"<g id=\"edge13\" class=\"edge\">\n",
|
||||||
|
"<title>2->1</title>\n",
|
||||||
|
"<path fill=\"none\" stroke=\"black\" d=\"M266.53,-78.94C260.3,-73.64 252.34,-68.04 244,-65.28 227.12,-59.7 219.76,-57.06 204,-65.28 191.77,-71.66 182.76,-84.13 176.69,-95.37\"/>\n",
|
||||||
|
"<polygon fill=\"black\" stroke=\"black\" points=\"173.46,-101.79 173.79,-94.12 175.03,-98.66 176.61,-95.54 176.61,-95.54 176.61,-95.54 175.03,-98.66 179.42,-96.95 173.46,-101.79 173.46,-101.79\"/>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"208\" y=\"-84.08\" font-family=\"Lato\" font-size=\"14.00\">a & b</text>\n",
|
||||||
|
"<text text-anchor=\"start\" x=\"216\" y=\"-69.08\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"</g>\n",
|
||||||
|
"</svg>\n"
|
||||||
|
],
|
||||||
|
"text/plain": [
|
||||||
|
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7efe6a301720> >"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"e = spot.translate('!(GFa -> (GFb & GF(!b & !Xb)))', 'gen', 'det')\n",
|
||||||
|
"f = spot.zielonka_tree_transform(e)\n",
|
||||||
|
"display(e,f)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 27,
|
||||||
|
"id": "complimentary-person",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"True"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 27,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"e.equivalent_to(f)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "determined-bankruptcy",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
"source": []
|
"source": []
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue