postproc: simplify the acceptance condition

* spot/twaalgos/postproc.cc: Here.
* spot/twaalgos/cobuchi.cc, spot/twaalgos/totgba.cc: Fix some bug
uncovered by the new simplified automata.
* tests/core/satmin2.test, tests/core/sccdot.test,
tests/core/sim3.test, tests/python/decompose.ipynb,
tests/python/satmin.ipynb: Update expected results.
* NEWS: Mention the simplification and the bug.
This commit is contained in:
Alexandre Duret-Lutz 2018-06-22 17:09:18 +02:00
parent 4532c0c13c
commit a325de8678
9 changed files with 1397 additions and 1530 deletions

9
NEWS
View file

@ -116,6 +116,10 @@ New in spot 2.5.3.dev (not yet released)
FG(a|b)|FG(!a|Xb)|FG(a|XXb) 21 4 4 FG(a|b)|FG(!a|Xb)|FG(a|XXb) 21 4 4
FG(a|b)|FG(!a|Xb)|FG(a|XXb)|FG(!a|XXXb) 170 8 8 FG(a|b)|FG(!a|Xb)|FG(a|XXb)|FG(!a|XXXb) 170 8 8
- The automaton postprocessor will now simplify acceptance
conditions more aggressively, calling spot::simplify_acceptance()
or spot::cleanup_acceptance() depanding on the optimization level.
- print_dot(), used to print automata in GraphViz's format, - print_dot(), used to print automata in GraphViz's format,
underwent several changes: underwent several changes:
@ -216,7 +220,10 @@ New in spot 2.5.3.dev (not yet released)
- The HOA parser will now accept Alias: declarations that occur - The HOA parser will now accept Alias: declarations that occur
before AP:. before AP:.
- the option --allow-dups of randltl now works properly - The option --allow-dups of randltl now works properly.
- Converting generalized-co-Büchi to Streett using dnf_to_nca()
could produce bogus automata if the input had rejecting SCCs.
Deprecation notice: Deprecation notice:

View file

@ -133,7 +133,7 @@ namespace spot
product_states* res_map_; // States of the aug. sub. cons. product_states* res_map_; // States of the aug. sub. cons.
scc_info si_; // SCC information. scc_info si_; // SCC information.
unsigned nb_states_; // Number of states. unsigned nb_states_; // Number of states.
unsigned was_rabin_; // Was it Rabin before Streett? unsigned was_dnf_; // Was it DNF before Streett?
std::vector<unsigned>* orig_states_; // Match old Rabin st. from new. std::vector<unsigned>* orig_states_; // Match old Rabin st. from new.
std::vector<unsigned>* orig_clauses_; // Associated Rabin clauses. std::vector<unsigned>* orig_clauses_; // Associated Rabin clauses.
unsigned orig_num_st_; // Rabin original nb states. unsigned orig_num_st_; // Rabin original nb states.
@ -148,7 +148,7 @@ namespace spot
bv->set(state); bv->set(state);
unsigned clause = 0; unsigned clause = 0;
unsigned state = st.first; unsigned state = st.first;
if (was_rabin_) if (was_dnf_)
{ {
clause = (*orig_clauses_)[state]; clause = (*orig_clauses_)[state];
assert((int)clause >= 0); assert((int)clause >= 0);
@ -194,7 +194,7 @@ namespace spot
const const_twa_graph_ptr ref_power, const const_twa_graph_ptr ref_power,
std::vector<acc_cond::rs_pair>& pairs, std::vector<acc_cond::rs_pair>& pairs,
bool named_states = false, bool named_states = false,
bool was_rabin = false, bool was_dnf = false,
unsigned orig_num_st = 0) unsigned orig_num_st = 0)
: aut_(ref_prod), : aut_(ref_prod),
state_based_(aut_->prop_state_acc().is_true()), state_based_(aut_->prop_state_acc().is_true()),
@ -206,10 +206,10 @@ namespace spot
si_(res_, (scc_info_options::TRACK_STATES si_(res_, (scc_info_options::TRACK_STATES
| scc_info_options::TRACK_SUCCS)), | scc_info_options::TRACK_SUCCS)),
nb_states_(res_->num_states()), nb_states_(res_->num_states()),
was_rabin_(was_rabin), was_dnf_(was_dnf),
orig_num_st_(orig_num_st ? orig_num_st : ref_prod->num_states()) orig_num_st_(orig_num_st ? orig_num_st : ref_prod->num_states())
{ {
if (was_rabin) if (was_dnf)
{ {
orig_states_ = ref_prod->get_named_prop<std::vector<unsigned>> orig_states_ = ref_prod->get_named_prop<std::vector<unsigned>>
("original-states"); ("original-states");

View file

@ -39,6 +39,7 @@
#include <spot/twaalgos/parity.hh> #include <spot/twaalgos/parity.hh>
#include <spot/twaalgos/cobuchi.hh> #include <spot/twaalgos/cobuchi.hh>
#include <spot/twaalgos/rabin2parity.hh> #include <spot/twaalgos/rabin2parity.hh>
#include <spot/twaalgos/cleanacc.hh>
namespace spot namespace spot
{ {
@ -230,6 +231,27 @@ namespace spot
throw std::runtime_error("postprocessor: the Colored setting only works " throw std::runtime_error("postprocessor: the Colored setting only works "
"for parity acceptance"); "for parity acceptance");
// Attempt to simplify the acceptance condition, unless this is a
// parity automaton and we want parity acceptance in the output.
auto simplify_acc = [&](twa_graph_ptr in)
{
if (PREF_ == Any && level_ == Low)
return in;
if (!(want_parity && in->acc().is_parity()))
{
if (level_ == High)
return simplify_acceptance(in);
else
return cleanup_acceptance(in);
}
if (level_ == High)
return cleanup_parity(in);
return in;
};
a = simplify_acc(a);
if (!a->is_existential() && if (!a->is_existential() &&
// We will probably have to revisit this condition later. // We will probably have to revisit this condition later.
// Currently, the intent is that postprocessor should never // Currently, the intent is that postprocessor should never
@ -438,6 +460,7 @@ namespace spot
{ {
dba = tgba_determinize(to_generalized_buchi(sim), dba = tgba_determinize(to_generalized_buchi(sim),
false, det_scc_, det_simul_, det_stutter_); false, det_scc_, det_simul_, det_stutter_);
dba = simplify_acc(dba);
if (level_ != Low) if (level_ != Low)
dba = simulation(dba); dba = simulation(dba);
sim = nullptr; sim = nullptr;

View file

@ -76,35 +76,32 @@ namespace spot
void void
split_dnf_clauses(const acc_cond::acc_code& code) split_dnf_clauses(const acc_cond::acc_code& code)
{ {
bool one_conjunction = false; auto pos = &code.back();
const acc_cond::acc_op root_op = code.back().sub.op; if (pos->sub.op == acc_cond::acc_op::Or)
auto s = code.back().sub.size; --pos;
while (s) auto start = &code.front();
while (pos > start)
{ {
--s; const unsigned short size = pos[0].sub.size;
if (code[s].sub.op == acc_cond::acc_op::And if (pos[0].sub.op == acc_cond::acc_op::And)
|| ((one_conjunction = root_op == acc_cond::acc_op::And)))
{ {
s = one_conjunction ? s + 1 : s;
const unsigned short size = code[s].sub.size;
acc_cond::mark_t fin = {}; acc_cond::mark_t fin = {};
acc_cond::mark_t inf = {}; acc_cond::mark_t inf = {};
for (unsigned i = 1; i <= size; i += 2) for (int i = 1; i <= (int)size; i += 2)
{ {
if (code[s-i].sub.op == acc_cond::acc_op::Fin) if (pos[-i].sub.op == acc_cond::acc_op::Fin)
fin |= code[s-i-1].mark; fin |= pos[-i - 1].mark;
else if (code[s-i].sub.op == acc_cond::acc_op::Inf) else if (pos[-i].sub.op == acc_cond::acc_op::Inf)
inf |= code[s-i-1].mark; inf |= pos[-i - 1].mark;
else else
SPOT_UNREACHABLE(); SPOT_UNREACHABLE();
} }
all_clauses_.emplace_back(fin, inf); all_clauses_.emplace_back(fin, inf);
set_to_keep_.emplace_back(fin | inf); set_to_keep_.emplace_back(fin | inf);
s -= size;
} }
else if (code[s].sub.op == acc_cond::acc_op::Fin) // Fin else if (pos[0].sub.op == acc_cond::acc_op::Fin) // Fin
{ {
auto m1 = code[--s].mark; auto m1 = pos[-1].mark;
for (unsigned int s : m1.sets()) for (unsigned int s : m1.sets())
{ {
all_clauses_.emplace_back(acc_cond::mark_t({s}), all_clauses_.emplace_back(acc_cond::mark_t({s}),
@ -112,9 +109,9 @@ namespace spot
set_to_keep_.emplace_back(acc_cond::mark_t({s})); set_to_keep_.emplace_back(acc_cond::mark_t({s}));
} }
} }
else if (code[s].sub.op == acc_cond::acc_op::Inf) // Inf else if (pos[0].sub.op == acc_cond::acc_op::Inf) // Inf
{ {
auto m2 = code[--s].mark; auto m2 = pos[-1].mark;
all_clauses_.emplace_back(acc_cond::mark_t({}), m2); all_clauses_.emplace_back(acc_cond::mark_t({}), m2);
set_to_keep_.emplace_back(m2); set_to_keep_.emplace_back(m2);
} }
@ -122,6 +119,7 @@ namespace spot
{ {
SPOT_UNREACHABLE(); SPOT_UNREACHABLE();
} }
pos -= size + 1;
} }
#if TRACE #if TRACE
trace << "\nPrinting all clauses\n"; trace << "\nPrinting all clauses\n";
@ -244,10 +242,12 @@ namespace spot
trace << "accepting clauses\n"; trace << "accepting clauses\n";
for (unsigned i = 0; i < res.size(); ++i) for (unsigned i = 0; i < res.size(); ++i)
{ {
trace << "scc(" << i << ") --> "; trace << "scc(" << i << ") -->";
for (auto elt : res[i]) for (auto elt : res[i])
trace << elt << ','; trace << ' ' << elt;
trace << '\n' if (si_.is_rejecting_scc(i))
trace << " rej";
trace << '\n';
} }
trace << '\n'; trace << '\n';
#endif #endif
@ -341,6 +341,7 @@ namespace spot
{ {
if (!si_.is_useful_scc(scc)) if (!si_.is_useful_scc(scc))
continue; continue;
trace << "scc #" << scc << '\n';
bool rej_scc = acc_clauses_[scc].empty(); bool rej_scc = acc_clauses_[scc].empty();
for (auto st : si_.states_of(scc)) for (auto st : si_.states_of(scc))
@ -388,7 +389,7 @@ namespace spot
acc_cond::mark_t m = {}; acc_cond::mark_t m = {};
if (same_scc || state_based_) if (same_scc || state_based_)
m = all_set_to_add_; m = e.acc | all_set_to_add_;
for (const auto& p_dst : st_repr_[e.dst]) for (const auto& p_dst : st_repr_[e.dst])
res_->new_edge(src, p_dst.second, e.cond, m); res_->new_edge(src, p_dst.second, e.cond, m);

View file

@ -335,7 +335,8 @@ HOA: v1
States: 1 States: 1
Start: 0 Start: 0
AP: 1 "a" AP: 1 "a"
Acceptance: 2 (Inf(0) & Fin(1)) | (Fin(0) & Inf(1)) acc-name: generalized-co-Buchi 2
Acceptance: 2 Fin(0)|Fin(1)
properties: trans-labels explicit-labels trans-acc colored complete properties: trans-labels explicit-labels trans-acc colored complete
properties: deterministic properties: deterministic
--BODY-- --BODY--

View file

@ -156,7 +156,7 @@ HOA: v1
States: 8 States: 8
Start: 0 Start: 0
AP: 2 "a" "b" AP: 2 "a" "b"
Acceptance: 3 (Inf(0)&Inf(1)) & Fin(2) Acceptance: 3 Fin(2) & (Inf(0)&Inf(1))
properties: trans-labels explicit-labels trans-acc properties: trans-labels explicit-labels trans-acc
--BODY-- --BODY--
State: 0 State: 0

View file

@ -1,7 +1,7 @@
#! /bin/sh #! /bin/sh
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Copyright (C) 2015 Laboratoire de Recherche et Développement de # Copyright (C) 2015, 2018 Laboratoire de Recherche et Développement
# l'Epita (LRDE). # de l'Epita (LRDE).
# #
# This file is part of Spot, a model checking library. # This file is part of Spot, a model checking library.
# #
@ -55,25 +55,25 @@ HOA: v1
States: 5 States: 5
Start: 0 Start: 0
AP: 2 "b" "a" AP: 2 "b" "a"
acc-name: Rabin 2 acc-name: Streett 1
Acceptance: 4 (Fin(0) & Inf(1)) | (Fin(2) & Inf(3)) Acceptance: 2 Fin(0) | Inf(1)
properties: trans-labels explicit-labels state-acc complete properties: trans-labels explicit-labels state-acc complete
properties: deterministic properties: deterministic
--BODY-- --BODY--
State: 0 State: 0
[!1] 1 [!1] 1
[1] 3 [1] 3
State: 1 {1 3} State: 1 {1}
[0&!1] 1 [0&!1] 1
[!0&!1] 2 [!0&!1] 2
[0&1] 3 [0&1] 3
[!0&1] 4 [!0&1] 4
State: 2 {1} State: 2
[0&!1] 1 [0&!1] 1
[!0&!1] 2 [!0&!1] 2
[0&1] 3 [0&1] 3
[!0&1] 4 [!0&1] 4
State: 3 {0 3} State: 3 {0 1}
[0&!1] 1 [0&!1] 1
[!0&!1] 2 [!0&!1] 2
[0&1] 3 [0&1] 3

View file

@ -200,7 +200,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42fa8f00> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d85c40f0> >"
] ]
}, },
"execution_count": 2, "execution_count": 2,
@ -330,7 +330,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f5f4b0> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d85c40c0> >"
] ]
}, },
"execution_count": 3, "execution_count": 3,
@ -489,7 +489,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f5f720> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d860a060> >"
] ]
}, },
"execution_count": 4, "execution_count": 4,
@ -587,7 +587,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f5fae0> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d85c4120> >"
] ]
}, },
"execution_count": 5, "execution_count": 5,
@ -669,7 +669,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f50bd0> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d8571690> >"
] ]
}, },
"execution_count": 6, "execution_count": 6,
@ -796,7 +796,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b437fb030> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d8571360> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -941,7 +941,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42fb30c0> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d860a240> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -1109,7 +1109,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b437fb030> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d862fed0> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -1512,7 +1512,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f7a780> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d8571540> >"
] ]
}, },
"execution_count": 8, "execution_count": 8,
@ -1942,7 +1942,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f7a8a0> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d85c4030> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -2174,7 +2174,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b437fb030> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d85c4150> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -2384,7 +2384,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f5f5a0> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d85bbfc0> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -2772,7 +2772,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f0a5a0> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d8571a80> >"
] ]
}, },
"execution_count": 10, "execution_count": 10,
@ -2788,7 +2788,7 @@
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {},
"source": [ "source": [
"The weak automata seem to be good candidates for further simplification. Let's add a call to `postprocess()` to out decomposition loop, trying to preserve the determinism and state-based acceptance of the original automaton." "The weak automata seem to be good candidates for further simplification. Let's add a call to `postprocess()` to our decomposition loop, trying to preserve the determinism and state-based acceptance of the original automaton."
] ]
}, },
{ {
@ -2933,7 +2933,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42fb30c0> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d8571bd0> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -3072,7 +3072,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42fa8f30> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d8571b10> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -3093,16 +3093,14 @@
"<title>strong</title>\n", "<title>strong</title>\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-332 901.6224,-332 901.6224,4 -4,4\"/>\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=\"428.3112\" y=\"-313.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">strong</text>\n",
"<text text-anchor=\"start\" x=\"332.3112\" y=\"-299.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">(Fin(</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=\"360.3112\" y=\"-299.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</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=\"376.3112\" y=\"-299.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">) &amp; Inf(</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=\"419.3112\" y=\"-299.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</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=\"435.3112\" y=\"-299.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)) | (Fin(</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=\"482.3112\" y=\"-299.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</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=\"498.3112\" y=\"-299.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">) &amp; Inf(</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=\"541.3112\" y=\"-299.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#6a3d9a\">❸</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",
"<text text-anchor=\"start\" x=\"557.3112\" y=\"-299.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">))</text>\n",
"<text text-anchor=\"start\" x=\"419.8112\" y=\"-285.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">[Rabin 2]</text>\n",
"<g id=\"clust1\" class=\"cluster\">\n", "<g id=\"clust1\" class=\"cluster\">\n",
"<title>cluster_0</title>\n", "<title>cluster_0</title>\n",
"<polygon fill=\"none\" stroke=\"#00ff00\" points=\"284,-38 284,-243 889.6224,-243 889.6224,-38 284,-38\"/>\n", "<polygon fill=\"none\" stroke=\"#00ff00\" points=\"284,-38 284,-243 889.6224,-243 889.6224,-38 284,-38\"/>\n",
@ -3137,8 +3135,8 @@
"<title>3</title>\n", "<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"325.9411\" cy=\"-135\" rx=\"33.8824\" ry=\"33.8824\"/>\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=\"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=\"#ff4da0\">❶</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=\"#ff7f00\">❷</text>\n", "<text text-anchor=\"start\" x=\"325.9411\" y=\"-124.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n", "</g>\n",
"<!-- 0&#45;&gt;3 -->\n", "<!-- 0&#45;&gt;3 -->\n",
"<g id=\"edge4\" class=\"edge\">\n", "<g id=\"edge4\" class=\"edge\">\n",
@ -3185,7 +3183,7 @@
"<title>4</title>\n", "<title>4</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"854.7523\" cy=\"-169\" rx=\"26.7407\" ry=\"26.7407\"/>\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=\"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=\"#ff7f00\">❷</text>\n", "<text text-anchor=\"start\" x=\"846.7523\" y=\"-157.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
"</g>\n", "</g>\n",
"<!-- 3&#45;&gt;4 -->\n", "<!-- 3&#45;&gt;4 -->\n",
"<g id=\"edge11\" class=\"edge\">\n", "<g id=\"edge11\" class=\"edge\">\n",
@ -3199,7 +3197,7 @@
"<title>5</title>\n", "<title>5</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"654.8823\" cy=\"-73\" rx=\"26.7407\" ry=\"26.7407\"/>\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=\"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=\"#6a3d9a\">❸</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", "</g>\n",
"<!-- 3&#45;&gt;5 -->\n", "<!-- 3&#45;&gt;5 -->\n",
"<g id=\"edge12\" class=\"edge\">\n", "<g id=\"edge12\" class=\"edge\">\n",
@ -3282,7 +3280,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f0a4e0> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d8571630> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -3635,7 +3633,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f7a720> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d8571ab0> >"
] ]
}, },
"execution_count": 12, "execution_count": 12,
@ -4018,7 +4016,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f7a6f0> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d85719c0> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -4195,7 +4193,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f0a4e0> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d8571630> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -4353,7 +4351,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f7a840> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d85715d0> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -4702,7 +4700,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f1b390> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d857d8d0> >"
] ]
}, },
"execution_count": 14, "execution_count": 14,
@ -4775,7 +4773,7 @@
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"37.9807,-53 30.9808,-56.1501 34.4807,-53 30.9807,-53.0001 30.9807,-53.0001 30.9807,-53.0001 34.4807,-53 30.9807,-49.8501 37.9807,-53 37.9807,-53\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"37.9807,-53 30.9808,-56.1501 34.4807,-53 30.9807,-53.0001 30.9807,-53.0001 30.9807,-53.0001 34.4807,-53 30.9807,-49.8501 37.9807,-53 37.9807,-53\"/>\n",
"</g>\n", "</g>\n",
"<!-- 0&#45;&gt;0 -->\n", "<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge4\" class=\"edge\">\n", "<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n", "<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M49.6208,-70.0373C48.3189,-79.8579 50.4453,-89 56,-89 60.166,-89 62.4036,-83.8576 62.7128,-77.1433\"/>\n", "<path fill=\"none\" stroke=\"#000000\" d=\"M49.6208,-70.0373C48.3189,-79.8579 50.4453,-89 56,-89 60.166,-89 62.4036,-83.8576 62.7128,-77.1433\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"62.3792,-70.0373 65.8541,-76.8818 62.5434,-73.5335 62.7076,-77.0296 62.7076,-77.0296 62.7076,-77.0296 62.5434,-73.5335 59.561,-77.1774 62.3792,-70.0373 62.3792,-70.0373\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"62.3792,-70.0373 65.8541,-76.8818 62.5434,-73.5335 62.7076,-77.0296 62.7076,-77.0296 62.7076,-77.0296 62.5434,-73.5335 59.561,-77.1774 62.3792,-70.0373 62.3792,-70.0373\"/>\n",
@ -4788,7 +4786,7 @@
"<text text-anchor=\"middle\" x=\"190\" y=\"-123.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n", "<text text-anchor=\"middle\" x=\"190\" y=\"-123.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
"</g>\n", "</g>\n",
"<!-- 0&#45;&gt;1 -->\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", "<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M71.8978,-61.7794C95.7732,-74.9643 140.964,-99.9204 167.9928,-114.8468\"/>\n", "<path fill=\"none\" stroke=\"#000000\" d=\"M71.8978,-61.7794C95.7732,-74.9643 140.964,-99.9204 167.9928,-114.8468\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"174.1229,-118.2321 166.4724,-117.6055 171.0591,-116.5401 167.9952,-114.848 167.9952,-114.848 167.9952,-114.848 171.0591,-116.5401 169.518,-112.0906 174.1229,-118.2321 174.1229,-118.2321\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"174.1229,-118.2321 166.4724,-117.6055 171.0591,-116.5401 167.9952,-114.848 167.9952,-114.848 167.9952,-114.848 171.0591,-116.5401 169.518,-112.0906 174.1229,-118.2321 174.1229,-118.2321\"/>\n",
@ -4801,7 +4799,7 @@
"<text text-anchor=\"middle\" x=\"190\" y=\"-30.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">2</text>\n", "<text text-anchor=\"middle\" x=\"190\" y=\"-30.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">2</text>\n",
"</g>\n", "</g>\n",
"<!-- 0&#45;&gt;2 -->\n", "<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge3\" class=\"edge\">\n", "<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n", "<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M74.0718,-50.4376C97.4488,-47.1229 138.2991,-41.3307 164.738,-37.5819\"/>\n", "<path fill=\"none\" stroke=\"#000000\" d=\"M74.0718,-50.4376C97.4488,-47.1229 138.2991,-41.3307 164.738,-37.5819\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"171.7865,-36.5825 165.2981,-40.6841 168.3212,-37.0739 164.8558,-37.5653 164.8558,-37.5653 164.8558,-37.5653 168.3212,-37.0739 164.4136,-34.4465 171.7865,-36.5825 171.7865,-36.5825\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"171.7865,-36.5825 165.2981,-40.6841 168.3212,-37.0739 164.8558,-37.5653 164.8558,-37.5653 164.8558,-37.5653 168.3212,-37.0739 164.4136,-34.4465 171.7865,-36.5825 171.7865,-36.5825\"/>\n",
@ -4825,7 +4823,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f1b600> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d850d7e0> >"
] ]
}, },
"execution_count": 15, "execution_count": 15,
@ -4892,7 +4890,7 @@
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"37.8045,-43 30.8046,-46.1501 34.3045,-43 30.8045,-43.0001 30.8045,-43.0001 30.8045,-43.0001 34.3045,-43 30.8045,-39.8501 37.8045,-43 37.8045,-43\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"37.8045,-43 30.8046,-46.1501 34.3045,-43 30.8045,-43.0001 30.8045,-43.0001 30.8045,-43.0001 34.3045,-43 30.8045,-39.8501 37.8045,-43 37.8045,-43\"/>\n",
"</g>\n", "</g>\n",
"<!-- 0&#45;&gt;0 -->\n", "<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\">\n", "<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n", "<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M56.6704,-68.8213C56.2072,-79.1776 58.9404,-87.8701 64.8701,-87.8701 69.3173,-87.8701 71.9666,-82.9805 72.8178,-76.1667\"/>\n", "<path fill=\"none\" stroke=\"#000000\" d=\"M56.6704,-68.8213C56.2072,-79.1776 58.9404,-87.8701 64.8701,-87.8701 69.3173,-87.8701 71.9666,-82.9805 72.8178,-76.1667\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"73.0697,-68.8213 75.9779,-75.9252 72.9497,-72.3193 72.8297,-75.8172 72.8297,-75.8172 72.8297,-75.8172 72.9497,-72.3193 69.6816,-75.7092 73.0697,-68.8213 73.0697,-68.8213\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"73.0697,-68.8213 75.9779,-75.9252 72.9497,-72.3193 72.8297,-75.8172 72.8297,-75.8172 72.8297,-75.8172 72.9497,-72.3193 69.6816,-75.7092 73.0697,-68.8213 73.0697,-68.8213\"/>\n",
@ -4906,7 +4904,7 @@
"<text text-anchor=\"start\" x=\"208.6102\" y=\"-31.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n", "<text text-anchor=\"start\" x=\"208.6102\" y=\"-31.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n", "</g>\n",
"<!-- 0&#45;&gt;1 -->\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", "<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M91.9981,-43C117.3521,-43 155.2997,-43 182.654,-43\"/>\n", "<path fill=\"none\" stroke=\"#000000\" d=\"M91.9981,-43C117.3521,-43 155.2997,-43 182.654,-43\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"189.7169,-43 182.717,-46.1501 186.2169,-43 182.7169,-43.0001 182.7169,-43.0001 182.7169,-43.0001 186.2169,-43 182.7169,-39.8501 189.7169,-43 189.7169,-43\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"189.7169,-43 182.717,-46.1501 186.2169,-43 182.7169,-43.0001 182.7169,-43.0001 182.7169,-43.0001 186.2169,-43 182.7169,-39.8501 189.7169,-43 189.7169,-43\"/>\n",
@ -4923,7 +4921,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f6c930> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d8571bd0> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -4968,7 +4966,7 @@
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"37.9807,-43 30.9808,-46.1501 34.4807,-43 30.9807,-43.0001 30.9807,-43.0001 30.9807,-43.0001 34.4807,-43 30.9807,-39.8501 37.9807,-43 37.9807,-43\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"37.9807,-43 30.9808,-46.1501 34.4807,-43 30.9807,-43.0001 30.9807,-43.0001 30.9807,-43.0001 34.4807,-43 30.9807,-39.8501 37.9807,-43 37.9807,-43\"/>\n",
"</g>\n", "</g>\n",
"<!-- 0&#45;&gt;0 -->\n", "<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\">\n", "<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n", "<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M49.6208,-60.0373C48.3189,-69.8579 50.4453,-79 56,-79 60.166,-79 62.4036,-73.8576 62.7128,-67.1433\"/>\n", "<path fill=\"none\" stroke=\"#000000\" d=\"M49.6208,-60.0373C48.3189,-69.8579 50.4453,-79 56,-79 60.166,-79 62.4036,-73.8576 62.7128,-67.1433\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"62.3792,-60.0373 65.8541,-66.8818 62.5434,-63.5335 62.7076,-67.0296 62.7076,-67.0296 62.7076,-67.0296 62.5434,-63.5335 59.561,-67.1774 62.3792,-60.0373 62.3792,-60.0373\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"62.3792,-60.0373 65.8541,-66.8818 62.5434,-63.5335 62.7076,-67.0296 62.7076,-67.0296 62.7076,-67.0296 62.5434,-63.5335 59.561,-67.1774 62.3792,-60.0373 62.3792,-60.0373\"/>\n",
@ -4982,7 +4980,7 @@
"<text text-anchor=\"start\" x=\"160.8701\" y=\"-31.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n", "<text text-anchor=\"start\" x=\"160.8701\" y=\"-31.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n", "</g>\n",
"<!-- 0&#45;&gt;1 -->\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", "<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M74.1345,-43C90.4516,-43 114.8566,-43 134.8094,-43\"/>\n", "<path fill=\"none\" stroke=\"#000000\" d=\"M74.1345,-43C90.4516,-43 114.8566,-43 134.8094,-43\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"141.9357,-43 134.9358,-46.1501 138.4357,-43 134.9357,-43.0001 134.9357,-43.0001 134.9357,-43.0001 138.4357,-43 134.9357,-39.8501 141.9357,-43 141.9357,-43\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"141.9357,-43 134.9358,-46.1501 138.4357,-43 134.9357,-43.0001 134.9357,-43.0001 134.9357,-43.0001 138.4357,-43 134.9357,-39.8501 141.9357,-43 141.9357,-43\"/>\n",
@ -4999,7 +4997,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f6c930> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d8571bd0> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -5062,7 +5060,7 @@
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"37.9807,-43 30.9808,-46.1501 34.4807,-43 30.9807,-43.0001 30.9807,-43.0001 30.9807,-43.0001 34.4807,-43 30.9807,-39.8501 37.9807,-43 37.9807,-43\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"37.9807,-43 30.9808,-46.1501 34.4807,-43 30.9807,-43.0001 30.9807,-43.0001 30.9807,-43.0001 34.4807,-43 30.9807,-39.8501 37.9807,-43 37.9807,-43\"/>\n",
"</g>\n", "</g>\n",
"<!-- 0&#45;&gt;0 -->\n", "<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge3\" class=\"edge\">\n", "<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n", "<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M49.6208,-60.0373C48.3189,-69.8579 50.4453,-79 56,-79 60.166,-79 62.4036,-73.8576 62.7128,-67.1433\"/>\n", "<path fill=\"none\" stroke=\"#000000\" d=\"M49.6208,-60.0373C48.3189,-69.8579 50.4453,-79 56,-79 60.166,-79 62.4036,-73.8576 62.7128,-67.1433\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"62.3792,-60.0373 65.8541,-66.8818 62.5434,-63.5335 62.7076,-67.0296 62.7076,-67.0296 62.7076,-67.0296 62.5434,-63.5335 59.561,-67.1774 62.3792,-60.0373 62.3792,-60.0373\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"62.3792,-60.0373 65.8541,-66.8818 62.5434,-63.5335 62.7076,-67.0296 62.7076,-67.0296 62.7076,-67.0296 62.5434,-63.5335 59.561,-67.1774 62.3792,-60.0373 62.3792,-60.0373\"/>\n",
@ -5076,7 +5074,7 @@
"<text text-anchor=\"start\" x=\"160.8701\" y=\"-31.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n", "<text text-anchor=\"start\" x=\"160.8701\" y=\"-31.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n", "</g>\n",
"<!-- 0&#45;&gt;1 -->\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", "<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M74.1345,-43C90.4516,-43 114.8566,-43 134.8094,-43\"/>\n", "<path fill=\"none\" stroke=\"#000000\" d=\"M74.1345,-43C90.4516,-43 114.8566,-43 134.8094,-43\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"141.9357,-43 134.9358,-46.1501 138.4357,-43 134.9357,-43.0001 134.9357,-43.0001 134.9357,-43.0001 138.4357,-43 134.9357,-39.8501 141.9357,-43 141.9357,-43\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"141.9357,-43 134.9358,-46.1501 138.4357,-43 134.9357,-43.0001 134.9357,-43.0001 134.9357,-43.0001 138.4357,-43 134.9357,-39.8501 141.9357,-43 141.9357,-43\"/>\n",
@ -5093,7 +5091,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f1bd80> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d850d720> >"
] ]
}, },
"execution_count": 18, "execution_count": 18,
@ -5243,7 +5241,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f1b750> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d850d780> >"
] ]
}, },
"execution_count": 19, "execution_count": 19,
@ -5403,7 +5401,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f2c690> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d850dd80> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -5505,7 +5503,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f7a840> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d85715d0> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -5640,7 +5638,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f2c120> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d850d090> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -5664,12 +5662,12 @@
"# `decompose_scc()` by SCC number\n", "# `decompose_scc()` by SCC number\n",
"\n", "\n",
"Decompose SCC can also be called by SCC numbers.\n", "Decompose SCC can also be called by SCC numbers.\n",
"The example below show the different SCC numbers and the state they contains, before extracting the sub-automaton containing SCC 1 and 2 (i.e., anything leading to states 1 and 4 of the original automaton). This example also shows that when an `scc_info` is available for to automaton to decompose, it can be passed to `decompose_scc()` in lieu of the automaton: doing so is faster because `decompose_scc()` does not need to rebuild this object. " "The example below show the different SCC numbers and the state they contains, before extracting the sub-automaton containing SCC 0 and 2 (i.e., anything leading to states 1 and 4 of the original automaton). This example also shows that when an `scc_info` is available for to automaton to decompose, it can be passed to `decompose_scc()` in lieu of the automaton: doing so is faster because `decompose_scc()` does not need to rebuild this object. "
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 21, "execution_count": 22,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@ -5844,7 +5842,7 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f6c990> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d85c4060> >"
] ]
}, },
"metadata": {}, "metadata": {},
@ -5859,122 +5857,136 @@
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n", "<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
" -->\n", " -->\n",
"<!-- Pages: 1 -->\n", "<!-- Pages: 1 -->\n",
"<svg width=\"413pt\" height=\"268pt\"\n", "<svg width=\"435pt\" height=\"173pt\"\n",
" viewBox=\"0.00 0.00 413.00 268.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n", " viewBox=\"0.00 0.00 435.00 173.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 264)\">\n", "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 169)\">\n",
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-264 409,-264 409,4 -4,4\"/>\n", "<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-169 431,-169 431,4 -4,4\"/>\n",
"<text text-anchor=\"start\" x=\"181.5\" y=\"-245.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">Inf(</text>\n", "<text text-anchor=\"start\" x=\"192.5\" y=\"-150.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">Inf(</text>\n",
"<text text-anchor=\"start\" x=\"203.5\" y=\"-245.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n", "<text text-anchor=\"start\" x=\"214.5\" y=\"-150.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"<text text-anchor=\"start\" x=\"219.5\" y=\"-245.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)</text>\n", "<text text-anchor=\"start\" x=\"230.5\" y=\"-150.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)</text>\n",
"<text text-anchor=\"start\" x=\"179.5\" y=\"-231.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">[Büchi]</text>\n", "<text text-anchor=\"start\" x=\"190.5\" y=\"-136.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">[Büchi]</text>\n",
"<g id=\"clust1\" class=\"cluster\">\n", "<g id=\"clust1\" class=\"cluster\">\n",
"<title>cluster_0</title>\n", "<title>cluster_0</title>\n",
"<polygon fill=\"none\" stroke=\"#00ff00\" points=\"166,-8 166,-108 218,-108 218,-8 166,-8\"/>\n", "<polygon fill=\"none\" stroke=\"#00ff00\" points=\"367,-20 367,-120 419,-120 419,-20 367,-20\"/>\n",
"</g>\n", "</g>\n",
"<g id=\"clust2\" class=\"cluster\">\n", "<g id=\"clust2\" class=\"cluster\">\n",
"<title>cluster_1</title>\n", "<title>cluster_1</title>\n",
"<polygon fill=\"none\" stroke=\"#c0c0c0\" points=\"345,-123 345,-208 397,-208 397,-123 345,-123\"/>\n", "<polygon fill=\"none\" stroke=\"#ff0000\" points=\"284,-20 284,-105 336,-105 336,-20 284,-20\"/>\n",
"</g>\n", "</g>\n",
"<g id=\"clust3\" class=\"cluster\">\n", "<g id=\"clust3\" class=\"cluster\">\n",
"<title>cluster_2</title>\n", "<title>cluster_2</title>\n",
"<polygon fill=\"none\" stroke=\"#ff0000\" points=\"30,-116 30,-216 293,-216 293,-116 30,-116\"/>\n", "<polygon fill=\"none\" stroke=\"#ff0000\" points=\"30,-20 30,-120 232,-120 232,-20 30,-20\"/>\n",
"</g>\n", "</g>\n",
"<!-- I -->\n", "<!-- I -->\n",
"<!-- 0 -->\n", "<!-- 0 -->\n",
"<g id=\"node2\" class=\"node\">\n", "<g id=\"node2\" class=\"node\">\n",
"<title>0</title>\n", "<title>0</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"56\" cy=\"-142\" rx=\"18\" ry=\"18\"/>\n", "<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"56\" cy=\"-46\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"56\" y=\"-138.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">0</text>\n", "<text text-anchor=\"middle\" x=\"56\" y=\"-42.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">0</text>\n",
"</g>\n", "</g>\n",
"<!-- I&#45;&gt;0 -->\n", "<!-- I&#45;&gt;0 -->\n",
"<g id=\"edge1\" class=\"edge\">\n", "<g id=\"edge1\" class=\"edge\">\n",
"<title>I&#45;&gt;0</title>\n", "<title>I&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M1.1233,-142C4.178,-142 17.9448,-142 30.9241,-142\"/>\n", "<path fill=\"none\" stroke=\"#000000\" d=\"M1.1233,-46C4.178,-46 17.9448,-46 30.9241,-46\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"37.9807,-142 30.9808,-145.1501 34.4807,-142 30.9807,-142.0001 30.9807,-142.0001 30.9807,-142.0001 34.4807,-142 30.9807,-138.8501 37.9807,-142 37.9807,-142\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"37.9807,-46 30.9808,-49.1501 34.4807,-46 30.9807,-46.0001 30.9807,-46.0001 30.9807,-46.0001 34.4807,-46 30.9807,-42.8501 37.9807,-46 37.9807,-46\"/>\n",
"</g>\n", "</g>\n",
"<!-- 0&#45;&gt;0 -->\n", "<!-- 0&#45;&gt;0 -->\n",
"<g id=\"edge2\" class=\"edge\">\n", "<g id=\"edge2\" class=\"edge\">\n",
"<title>0&#45;&gt;0</title>\n", "<title>0&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M49.6208,-159.0373C48.3189,-168.8579 50.4453,-178 56,-178 60.166,-178 62.4036,-172.8576 62.7128,-166.1433\"/>\n", "<path fill=\"none\" stroke=\"#000000\" d=\"M49.6208,-63.0373C48.3189,-72.8579 50.4453,-82 56,-82 60.166,-82 62.4036,-76.8576 62.7128,-70.1433\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"62.3792,-159.0373 65.8541,-165.8818 62.5434,-162.5335 62.7076,-166.0296 62.7076,-166.0296 62.7076,-166.0296 62.5434,-162.5335 59.561,-166.1774 62.3792,-159.0373 62.3792,-159.0373\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"62.3792,-63.0373 65.8541,-69.8818 62.5434,-66.5335 62.7076,-70.0296 62.7076,-70.0296 62.7076,-70.0296 62.5434,-66.5335 59.561,-70.1774 62.3792,-63.0373 62.3792,-63.0373\"/>\n",
"<text text-anchor=\"start\" x=\"36\" y=\"-181.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a &amp; !c</text>\n", "<text text-anchor=\"start\" x=\"36\" y=\"-85.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a &amp; !c</text>\n",
"</g>\n", "</g>\n",
"<!-- 1 -->\n", "<!-- 1 -->\n",
"<g id=\"node3\" class=\"node\">\n", "<g id=\"node3\" class=\"node\">\n",
"<title>1</title>\n", "<title>1</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"192\" cy=\"-34\" rx=\"18\" ry=\"18\"/>\n", "<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"393\" cy=\"-46\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"192\" y=\"-30.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n", "<text text-anchor=\"middle\" x=\"393\" y=\"-42.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
"</g>\n", "</g>\n",
"<!-- 0&#45;&gt;1 -->\n", "<!-- 0&#45;&gt;1 -->\n",
"<g id=\"edge3\" class=\"edge\">\n", "<g id=\"edge3\" class=\"edge\">\n",
"<title>0&#45;&gt;1</title>\n", "<title>0&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M70.2973,-130.6462C94.7464,-111.2308 144.6248,-71.6215 172.3348,-49.6165\"/>\n", "<path fill=\"none\" stroke=\"#000000\" d=\"M68.1391,-32.6949C81.9254,-19.1093 105.7965,0 131,0 131,0 131,0 310,0 334.5036,0 358.5513,-15.5275 374.4016,-28.5397\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"177.8942,-45.2016 174.3714,-52.0217 175.1533,-47.3782 172.4124,-49.5549 172.4124,-49.5549 172.4124,-49.5549 175.1533,-47.3782 170.4535,-47.088 177.8942,-45.2016 177.8942,-45.2016\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"379.8559,-33.1864 372.4846,-31.0447 377.1916,-30.9167 374.5274,-28.6469 374.5274,-28.6469 374.5274,-28.6469 377.1916,-30.9167 376.5702,-26.249 379.8559,-33.1864 379.8559,-33.1864\"/>\n",
"<text text-anchor=\"start\" x=\"92\" y=\"-117.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; b &amp; !c</text>\n", "<text text-anchor=\"start\" x=\"202.5\" y=\"-3.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">c</text>\n",
"</g>\n", "</g>\n",
"<!-- 2 -->\n", "<!-- 2 -->\n",
"<g id=\"node5\" class=\"node\">\n", "<g id=\"node5\" class=\"node\">\n",
"<title>2</title>\n", "<title>2</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"267\" cy=\"-149\" rx=\"18\" ry=\"18\"/>\n", "<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"206\" cy=\"-56\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"267\" y=\"-145.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">2</text>\n", "<text text-anchor=\"middle\" x=\"206\" y=\"-52.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">2</text>\n",
"</g>\n", "</g>\n",
"<!-- 0&#45;&gt;2 -->\n", "<!-- 0&#45;&gt;2 -->\n",
"<g id=\"edge4\" class=\"edge\">\n", "<g id=\"edge4\" class=\"edge\">\n",
"<title>0&#45;&gt;2</title>\n", "<title>0&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M74.3558,-142.609C112.1732,-143.8636 198.8193,-146.7381 241.8285,-148.1649\"/>\n", "<path fill=\"none\" stroke=\"#000000\" d=\"M74.0935,-47.2062C100.6718,-48.9781 150.3801,-52.292 180.604,-54.3069\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"248.8369,-148.3974 241.7363,-151.3135 245.3389,-148.2813 241.8408,-148.1652 241.8408,-148.1652 241.8408,-148.1652 245.3389,-148.2813 241.9453,-145.017 248.8369,-148.3974 248.8369,-148.3974\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"187.8423,-54.7895 180.6483,-57.4668 184.3501,-54.5566 180.8578,-54.3238 180.8578,-54.3238 180.8578,-54.3238 184.3501,-54.5566 181.0674,-51.1807 187.8423,-54.7895 187.8423,-54.7895\"/>\n",
"<text text-anchor=\"start\" x=\"174\" y=\"-150.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; !c</text>\n", "<text text-anchor=\"start\" x=\"113\" y=\"-55.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; !c</text>\n",
"</g>\n", "</g>\n",
"<!-- 1&#45;&gt;1 -->\n", "<!-- 1&#45;&gt;1 -->\n",
"<g id=\"edge5\" class=\"edge\">\n", "<g id=\"edge5\" class=\"edge\">\n",
"<title>1&#45;&gt;1</title>\n", "<title>1&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M185.2664,-51.0373C183.8922,-60.8579 186.1367,-70 192,-70 196.3975,-70 198.7594,-64.8576 199.0858,-58.1433\"/>\n", "<path fill=\"none\" stroke=\"#000000\" d=\"M385.9688,-62.6641C384.4063,-72.625 386.75,-82 393,-82 397.6875,-82 400.1777,-76.7266 400.4707,-69.8876\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"198.7336,-51.0373 202.2263,-57.8728 198.9069,-54.533 199.0802,-58.0287 199.0802,-58.0287 199.0802,-58.0287 198.9069,-54.533 195.934,-58.1847 198.7336,-51.0373 198.7336,-51.0373\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"400.0313,-62.6641 403.6006,-69.4598 400.2438,-66.1576 400.4564,-69.6511 400.4564,-69.6511 400.4564,-69.6511 400.2438,-66.1576 397.3122,-69.8425 400.0313,-62.6641 400.0313,-62.6641\"/>\n",
"<text text-anchor=\"start\" x=\"187.5\" y=\"-88.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">b</text>\n", "<text text-anchor=\"start\" x=\"388.5\" y=\"-100.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
"<text text-anchor=\"start\" x=\"184\" y=\"-73.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n", "<text text-anchor=\"start\" x=\"385\" y=\"-85.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
"</g>\n", "</g>\n",
"<!-- 3 -->\n", "<!-- 3 -->\n",
"<g id=\"node4\" class=\"node\">\n", "<g id=\"node4\" class=\"node\">\n",
"<title>3</title>\n", "<title>3</title>\n",
"<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"371\" cy=\"-149\" rx=\"18\" ry=\"18\"/>\n", "<ellipse fill=\"#ffffaa\" stroke=\"#000000\" cx=\"310\" cy=\"-46\" rx=\"18\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"371\" y=\"-145.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">3</text>\n", "<text text-anchor=\"middle\" x=\"310\" y=\"-42.3\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">3</text>\n",
"</g>\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=\"M328.0098,-46C339.5679,-46 354.7507,-46 367.5345,-46\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"374.7388,-46 367.7388,-49.1501 371.2388,-46 367.7388,-46.0001 367.7388,-46.0001 367.7388,-46.0001 371.2388,-46 367.7387,-42.8501 374.7388,-46 374.7388,-46\"/>\n",
"<text text-anchor=\"start\" x=\"346\" y=\"-49.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a</text>\n",
"</g>\n", "</g>\n",
"<!-- 3&#45;&gt;3 -->\n", "<!-- 3&#45;&gt;3 -->\n",
"<g id=\"edge9\" class=\"edge\">\n", "<g id=\"edge11\" class=\"edge\">\n",
"<title>3&#45;&gt;3</title>\n", "<title>3&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M362.0212,-164.916C359.679,-175.1504 362.6719,-185 371,-185 377.3762,-185 380.625,-179.2263 380.7465,-171.9268\"/>\n", "<path fill=\"none\" stroke=\"#000000\" d=\"M302.9688,-62.6641C301.4063,-72.625 303.75,-82 310,-82 314.6875,-82 317.1777,-76.7266 317.4707,-69.8876\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"379.9788,-164.916 383.8721,-171.5315 380.3598,-168.3952 380.7408,-171.8744 380.7408,-171.8744 380.7408,-171.8744 380.3598,-168.3952 377.6095,-172.2174 379.9788,-164.916 379.9788,-164.916\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"317.0313,-62.6641 320.6006,-69.4598 317.2438,-66.1576 317.4564,-69.6511 317.4564,-69.6511 317.4564,-69.6511 317.2438,-66.1576 314.3122,-69.8425 317.0313,-62.6641 317.0313,-62.6641\"/>\n",
"<text text-anchor=\"start\" x=\"367.5\" y=\"-188.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n", "<text text-anchor=\"start\" x=\"306.5\" y=\"-85.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
"</g>\n", "</g>\n",
"<!-- 2&#45;&gt;0 -->\n", "<!-- 2&#45;&gt;0 -->\n",
"<g id=\"edge6\" class=\"edge\">\n", "<g id=\"edge6\" class=\"edge\">\n",
"<title>2&#45;&gt;0</title>\n", "<title>2&#45;&gt;0</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M250.1337,-156.4182C240.8505,-160.0978 229.0101,-164.1443 218,-166 168.9974,-174.259 111.3933,-160.0533 79.7745,-150.2082\"/>\n", "<path fill=\"none\" stroke=\"#000000\" d=\"M189.0754,-62.434C169.992,-68.8187 138.0894,-76.8678 111,-71 99.6726,-68.5464 87.8767,-63.5531 78.1272,-58.6697\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"73.0614,-148.0609 80.6883,-147.1933 76.395,-149.1272 79.7286,-150.1936 79.7286,-150.1936 79.7286,-150.1936 76.395,-149.1272 78.7689,-153.1938 73.0614,-148.0609 73.0614,-148.0609\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"71.7353,-55.339 79.3988,-55.7804 74.8392,-56.9564 77.9431,-58.5739 77.9431,-58.5739 77.9431,-58.5739 74.8392,-56.9564 76.4875,-61.3673 71.7353,-55.339 71.7353,-55.339\"/>\n",
"<text text-anchor=\"start\" x=\"172\" y=\"-171.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a &amp; !c</text>\n", "<text text-anchor=\"start\" x=\"111\" y=\"-76.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a &amp; !c</text>\n",
"</g>\n",
"<!-- 2&#45;&gt;1 -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>2&#45;&gt;1</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M219.0266,-68.4976C242.5652,-89.4912 293.6722,-127.7847 336,-109 354.8745,-100.6237 370.1522,-82.5674 380.1221,-67.9237\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"384.0651,-61.895 382.8698,-69.4775 382.1493,-64.8242 380.2336,-67.7533 380.2336,-67.7533 380.2336,-67.7533 382.1493,-64.8242 377.5973,-66.0292 384.0651,-61.895 384.0651,-61.895\"/>\n",
"<text text-anchor=\"start\" x=\"292\" y=\"-117.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a &amp; c</text>\n",
"</g>\n", "</g>\n",
"<!-- 2&#45;&gt;3 -->\n", "<!-- 2&#45;&gt;3 -->\n",
"<g id=\"edge8\" class=\"edge\">\n", "<g id=\"edge9\" class=\"edge\">\n",
"<title>2&#45;&gt;3</title>\n", "<title>2&#45;&gt;3</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M285.1154,-149C301.8642,-149 326.92,-149 345.6521,-149\"/>\n", "<path fill=\"none\" stroke=\"#000000\" d=\"M224.1154,-54.2581C240.8642,-52.6477 265.92,-50.2385 284.6521,-48.4373\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"352.7432,-149 345.7433,-152.1501 349.2432,-149 345.7432,-149.0001 345.7432,-149.0001 345.7432,-149.0001 349.2432,-149 345.7432,-145.8501 352.7432,-149 352.7432,-149\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"291.7432,-47.7555 285.0769,-51.5611 288.2593,-48.0905 284.7754,-48.4255 284.7754,-48.4255 284.7754,-48.4255 288.2593,-48.0905 284.4738,-45.29 291.7432,-47.7555 291.7432,-47.7555\"/>\n",
"<text text-anchor=\"start\" x=\"303\" y=\"-152.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; c</text>\n", "<text text-anchor=\"start\" x=\"242\" y=\"-55.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; c</text>\n",
"</g>\n", "</g>\n",
"<!-- 2&#45;&gt;2 -->\n", "<!-- 2&#45;&gt;2 -->\n",
"<g id=\"edge7\" class=\"edge\">\n", "<g id=\"edge8\" class=\"edge\">\n",
"<title>2&#45;&gt;2</title>\n", "<title>2&#45;&gt;2</title>\n",
"<path fill=\"none\" stroke=\"#000000\" d=\"M260.6208,-166.0373C259.3189,-175.8579 261.4453,-185 267,-185 271.166,-185 273.4036,-179.8576 273.7128,-173.1433\"/>\n", "<path fill=\"none\" stroke=\"#000000\" d=\"M199.6208,-73.0373C198.3189,-82.8579 200.4453,-92 206,-92 210.166,-92 212.4036,-86.8576 212.7128,-80.1433\"/>\n",
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"273.3792,-166.0373 276.8541,-172.8818 273.5434,-169.5335 273.7076,-173.0296 273.7076,-173.0296 273.7076,-173.0296 273.5434,-169.5335 270.561,-173.1774 273.3792,-166.0373 273.3792,-166.0373\"/>\n", "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"212.3792,-73.0373 215.8541,-79.8818 212.5434,-76.5335 212.7076,-80.0296 212.7076,-80.0296 212.7076,-80.0296 212.5434,-76.5335 209.561,-80.1774 212.3792,-73.0373 212.3792,-73.0373\"/>\n",
"<text text-anchor=\"start\" x=\"249\" y=\"-188.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; !c</text>\n", "<text text-anchor=\"start\" x=\"188\" y=\"-95.8\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a &amp; !c</text>\n",
"</g>\n", "</g>\n",
"</g>\n", "</g>\n",
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f6c900> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d860a240> >"
] ]
}, },
"execution_count": 21, "execution_count": 22,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@ -5985,7 +5997,7 @@
"for scc in range(si.scc_count()):\n", "for scc in range(si.scc_count()):\n",
" print(\"SCC #{} containts states {}\".format(scc, list(si.states_of(scc))))\n", " print(\"SCC #{} containts states {}\".format(scc, list(si.states_of(scc))))\n",
"display(aut)\n", "display(aut)\n",
"spot.decompose_scc(si, '1,2')" "spot.decompose_scc(si, '0,2')"
] ]
}, },
{ {
@ -5997,7 +6009,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 22, "execution_count": 23,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
@ -6074,10 +6086,10 @@
"</svg>\n" "</svg>\n"
], ],
"text/plain": [ "text/plain": [
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6b42f2c150> >" "<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fd3d850d8d0> >"
] ]
}, },
"execution_count": 22, "execution_count": 23,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
@ -6103,7 +6115,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.6.5" "version": "3.6.5+"
} }
}, },
"nbformat": 4, "nbformat": 4,

File diff suppressed because it is too large Load diff