translate: enable a restricted form of ltl-split for TGBA/BA
Fixes #267 * spot/twaalgos/gfguarantee.cc: Fix a typo when comparing automata sizes. * spot/twaalgos/translate.cc, spot/twaalgos/translate.hh: Use ltl-split even for BA/TGBA, but only of conjunctions with GF(..) in those cases. * tests/core/ltl2tgba2.test: Adjust and add the example of #267. * tests/core/degenid.test, tests/core/parity2.test, tests/core/stutter-tgba.test, tests/python/automata.ipynb, tests/python/highlighting.ipynb, tests/python/stutter-inv.ipynb, bin/spot-x.cc: Adjust.
This commit is contained in:
parent
4235b007f3
commit
f5f5daec9a
11 changed files with 1338 additions and 1494 deletions
|
|
@ -46,8 +46,7 @@ more rules based on automata-based implication checks. The default value \
|
|||
depends on the --low/--medium/--high settings.") },
|
||||
{ nullptr, 0, nullptr, 0, "Translation options:", 0 },
|
||||
{ DOC("ltl-split", "Set to 0 to disable the translation of automata \
|
||||
as product or sum of subformulas. This is currently used only when \
|
||||
building automata with generic acceptance conditions.") },
|
||||
as product or sum of subformulas.") },
|
||||
{ DOC("comp-susp", "Set to 1 to enable compositional suspension, \
|
||||
as described in our SPIN'13 paper (see Bibliography below). Set to 2, \
|
||||
to build only the skeleton TGBA without composing it. Set to 0 (the \
|
||||
|
|
|
|||
|
|
@ -418,7 +418,7 @@ namespace spot
|
|||
if (!is_terminal_automaton(aut, &si2, true))
|
||||
return reduced;
|
||||
do_g_f_terminal_inplace(si2, state_based);
|
||||
if (aut->num_states() <= reduced->num_states())
|
||||
if (aut->num_states() < reduced->num_states())
|
||||
return aut;
|
||||
}
|
||||
return reduced;
|
||||
|
|
|
|||
|
|
@ -105,7 +105,8 @@ namespace spot
|
|||
simpl_owned_ = simpl_ = new tl_simplifier(options, dict);
|
||||
}
|
||||
|
||||
twa_graph_ptr translator::run(formula* f)
|
||||
|
||||
twa_graph_ptr translator::run_aux(formula r)
|
||||
{
|
||||
#define PREF_ (pref_ & (Small | Deterministic))
|
||||
|
||||
|
|
@ -118,49 +119,6 @@ namespace spot
|
|||
set_pref(pref_ | postprocessor::Deterministic);
|
||||
}
|
||||
|
||||
// Do we want to relabel Boolean subformulas?
|
||||
// If we have a huge formula such as
|
||||
// (a1 & a2 & ... & an) U (b1 | b2 | ... | bm)
|
||||
// then it is more efficient to translate
|
||||
// a U b
|
||||
// and then fix the automaton. We use relabel_bse() to find
|
||||
// sub-formulas that are Boolean but do not have common terms.
|
||||
//
|
||||
// This rewriting is enabled only if the formula
|
||||
// 1) has some Boolean subformula
|
||||
// 2) has more than relabel_bool_ atomic propositions (the default
|
||||
// is 4, but this can be changed)
|
||||
// 3) relabel_bse() actually reduces the number of atomic
|
||||
// propositions.
|
||||
relabeling_map m;
|
||||
formula to_work_on = *f;
|
||||
if (relabel_bool_ > 0)
|
||||
{
|
||||
bool has_boolean_sub = false; // that is not atomic
|
||||
std::set<formula> aps;
|
||||
to_work_on.traverse([&](const formula& f)
|
||||
{
|
||||
if (f.is(op::ap))
|
||||
aps.insert(f);
|
||||
else if (f.is_boolean())
|
||||
has_boolean_sub = true;
|
||||
return false;
|
||||
});
|
||||
unsigned atomic_props = aps.size();
|
||||
if (has_boolean_sub && (atomic_props >= (unsigned) relabel_bool_))
|
||||
{
|
||||
formula relabeled = relabel_bse(to_work_on, Pnn, &m);
|
||||
if (m.size() < atomic_props)
|
||||
to_work_on = relabeled;
|
||||
else
|
||||
m.clear();
|
||||
}
|
||||
}
|
||||
|
||||
formula r = simpl_->simplify(to_work_on);
|
||||
if (to_work_on == *f)
|
||||
*f = r;
|
||||
|
||||
// This helps ltl_to_tgba_fm() to order BDD variables in a more
|
||||
// natural way (improving the degeneralization).
|
||||
simpl_->clear_as_bdd_cache();
|
||||
|
|
@ -168,8 +126,7 @@ namespace spot
|
|||
twa_graph_ptr aut;
|
||||
twa_graph_ptr aut2 = nullptr;
|
||||
|
||||
if (ltl_split_ && (type_ == Generic
|
||||
|| (type_ & Parity)) && !r.is_syntactic_obligation())
|
||||
if (ltl_split_ && !r.is_syntactic_obligation())
|
||||
{
|
||||
formula r2 = r;
|
||||
unsigned leading_x = 0;
|
||||
|
|
@ -178,11 +135,11 @@ namespace spot
|
|||
r2 = r2[0];
|
||||
++leading_x;
|
||||
}
|
||||
if (type_ == Generic)
|
||||
if (type_ == Generic || type_ == TGBA)
|
||||
{
|
||||
// F(q|u|f) = q|F(u)|F(f)
|
||||
// F(q|u|f) = q|F(u)|F(f) only for generic acceptance
|
||||
// G(q&e&f) = q&G(e)&G(f)
|
||||
bool want_u = r2.is({op::F, op::Or});
|
||||
bool want_u = r2.is({op::F, op::Or}) && (type_ == Generic);
|
||||
if (want_u || r2.is({op::G, op::And}))
|
||||
{
|
||||
std::vector<formula> susp;
|
||||
|
|
@ -204,7 +161,12 @@ namespace spot
|
|||
r2 = formula::multop(op2, susp);
|
||||
}
|
||||
}
|
||||
if (r2.is_syntactic_obligation() || !r2.is(op::And, op::Or))
|
||||
if (r2.is_syntactic_obligation() || !r2.is(op::And, op::Or) ||
|
||||
// For TGBA/BA we only do conjunction. There is nothing wrong
|
||||
// with disjunction, but it seems to generated larger automata
|
||||
// in many cases and it needs to be further investigated. Maybe
|
||||
// this could be relaxed in the case of deterministic output.
|
||||
(r2.is(op::Or) && (type_ == TGBA || type_ == BA)))
|
||||
goto nosplit;
|
||||
|
||||
bool is_and = r2.is(op::And);
|
||||
|
|
@ -212,16 +174,38 @@ namespace spot
|
|||
std::vector<formula> oblg;
|
||||
std::vector<formula> susp;
|
||||
std::vector<formula> rest;
|
||||
bool want_g = type_ == TGBA || type_ == BA;
|
||||
for (formula child: r2)
|
||||
{
|
||||
if (child.is_syntactic_obligation())
|
||||
oblg.push_back(child);
|
||||
else if (child.is_eventual() && child.is_universal()
|
||||
&& (type_ == Generic))
|
||||
&& (!want_g || child.is(op::G)))
|
||||
susp.push_back(child);
|
||||
else
|
||||
rest.push_back(child);
|
||||
}
|
||||
|
||||
if (!susp.empty())
|
||||
{
|
||||
// The only cases where we accept susp and rest to be both
|
||||
// non-empty is when doing arbitrary acceptance, or when doing
|
||||
// Generic or TGBA.
|
||||
if (!rest.empty() && !(type_ == Generic || type_ == TGBA))
|
||||
{
|
||||
rest.insert(rest.end(), susp.begin(), susp.end());
|
||||
susp.clear();
|
||||
}
|
||||
// For Parity, we want to translate all suspendable
|
||||
// formulas at once.
|
||||
if (rest.empty() && type_ & Parity)
|
||||
susp = { formula::multop(r2.kind(), susp) };
|
||||
}
|
||||
// For TGBA and BA, we only split if there is something to
|
||||
// suspend.
|
||||
if (susp.empty() && (type_ == TGBA || type_ == BA))
|
||||
goto nosplit;
|
||||
|
||||
option_map om;
|
||||
if (opt_)
|
||||
om = *opt_;
|
||||
|
|
@ -238,34 +222,26 @@ namespace spot
|
|||
return run(f);
|
||||
};
|
||||
|
||||
// std::cerr << "splitting\n";
|
||||
aut = nullptr;
|
||||
// All obligations can be converted into a minimal WDBA.
|
||||
if (!oblg.empty())
|
||||
{
|
||||
formula oblg_f = formula::multop(r2.kind(), oblg);
|
||||
//std::cerr << "oblg: " << oblg_f << '\n';
|
||||
aut = transrun(oblg_f);
|
||||
}
|
||||
if (!rest.empty())
|
||||
{
|
||||
formula rest_f = formula::multop(r2.kind(), rest);
|
||||
// In case type_ is Parity, all suspendable formulas have
|
||||
// been put into rest_f. But if the entire rest_f is
|
||||
// suspendable, we want to handle it like so.
|
||||
if (rest_f.is_eventual() && rest_f.is_universal())
|
||||
{
|
||||
assert(susp.empty());
|
||||
susp.push_back(rest_f);
|
||||
}
|
||||
//std::cerr << "rest: " << rest_f << '\n';
|
||||
twa_graph_ptr rest_aut = transrun(rest_f);
|
||||
if (aut == nullptr)
|
||||
aut = rest_aut;
|
||||
else if (is_and)
|
||||
aut = product(aut, rest_aut);
|
||||
else
|
||||
{
|
||||
twa_graph_ptr rest_aut = transrun(rest_f);
|
||||
if (aut == nullptr)
|
||||
aut = rest_aut;
|
||||
else if (is_and)
|
||||
aut = product(aut, rest_aut);
|
||||
else
|
||||
aut = product_or(aut, rest_aut);
|
||||
}
|
||||
aut = product_or(aut, rest_aut);
|
||||
}
|
||||
if (!susp.empty())
|
||||
{
|
||||
|
|
@ -273,6 +249,7 @@ namespace spot
|
|||
// Each suspendable formula separately
|
||||
for (formula f: susp)
|
||||
{
|
||||
//std::cerr << "susp: " << f << '\n';
|
||||
twa_graph_ptr one = transrun(f);
|
||||
if (!susp_aut)
|
||||
susp_aut = one;
|
||||
|
|
@ -370,6 +347,56 @@ namespace spot
|
|||
aut = std::move(aut2);
|
||||
}
|
||||
|
||||
return aut;
|
||||
}
|
||||
|
||||
twa_graph_ptr translator::run(formula* f)
|
||||
{
|
||||
// Do we want to relabel Boolean subformulas?
|
||||
// If we have a huge formula such as
|
||||
// (a1 & a2 & ... & an) U (b1 | b2 | ... | bm)
|
||||
// then it is more efficient to translate
|
||||
// a U b
|
||||
// and then fix the automaton. We use relabel_bse() to find
|
||||
// sub-formulas that are Boolean but do not have common terms.
|
||||
//
|
||||
// This rewriting is enabled only if the formula
|
||||
// 1) has some Boolean subformula
|
||||
// 2) has more than relabel_bool_ atomic propositions (the default
|
||||
// is 4, but this can be changed)
|
||||
// 3) relabel_bse() actually reduces the number of atomic
|
||||
// propositions.
|
||||
relabeling_map m;
|
||||
formula to_work_on = *f;
|
||||
if (relabel_bool_ > 0)
|
||||
{
|
||||
bool has_boolean_sub = false; // that is not atomic
|
||||
std::set<formula> aps;
|
||||
to_work_on.traverse([&](const formula& f)
|
||||
{
|
||||
if (f.is(op::ap))
|
||||
aps.insert(f);
|
||||
else if (f.is_boolean())
|
||||
has_boolean_sub = true;
|
||||
return false;
|
||||
});
|
||||
unsigned atomic_props = aps.size();
|
||||
if (has_boolean_sub && (atomic_props >= (unsigned) relabel_bool_))
|
||||
{
|
||||
formula relabeled = relabel_bse(to_work_on, Pnn, &m);
|
||||
if (m.size() < atomic_props)
|
||||
to_work_on = relabeled;
|
||||
else
|
||||
m.clear();
|
||||
}
|
||||
}
|
||||
|
||||
formula r = simpl_->simplify(to_work_on);
|
||||
if (to_work_on == *f)
|
||||
*f = r;
|
||||
|
||||
auto aut = run_aux(r);
|
||||
|
||||
if (!m.empty())
|
||||
relabel_here(aut, &m);
|
||||
return aut;
|
||||
|
|
|
|||
|
|
@ -138,6 +138,7 @@ namespace spot
|
|||
protected:
|
||||
void setup_opt(const option_map* opt);
|
||||
void build_simplifier(const bdd_dict_ptr& dict);
|
||||
twa_graph_ptr run_aux(formula f);
|
||||
|
||||
private:
|
||||
tl_simplifier* simpl_;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#!/bin/sh
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (C) 2011, 2013, 2014, 2015, 2017 Laboratoire de Recherche
|
||||
# et Développement de l'Epita (LRDE).
|
||||
# Copyright (C) 2011, 2013, 2014, 2015, 2017, 2018 Laboratoire de
|
||||
# Recherche et Développement de l'Epita (LRDE).
|
||||
#
|
||||
# This file is part of Spot, a model checking library.
|
||||
#
|
||||
|
|
@ -239,7 +239,9 @@ properties: trans-labels explicit-labels state-acc deterministic
|
|||
properties: stutter-invariant
|
||||
--BODY--
|
||||
State: 0
|
||||
[0] 1
|
||||
[0&1&2] 1
|
||||
[0&!2] 2
|
||||
[0&!1&2] 3
|
||||
State: 1 {0}
|
||||
[1&2] 1
|
||||
[!2] 2
|
||||
|
|
|
|||
|
|
@ -362,12 +362,14 @@ EOF
|
|||
diff output expected
|
||||
|
||||
|
||||
# These four formulas appear in a NEWS entry for Spot 2.6
|
||||
# The first four formulas appear in a NEWS entry for Spot 2.6
|
||||
# The 5th one is from issue #267.
|
||||
cat >formulas <<EOF
|
||||
GF((a & XXa) | (!a & XX!a)), 4,8, 4,8, 6,14, 7,14
|
||||
GF((a & XXXa) | (!a & XXX!a)), 7,14, 8,16, 8,18, 15,30
|
||||
GF(((a & Xb) | XXc) & Xd), 4,60, 4,64, 4,68, 5,80
|
||||
GF(((a & Xb) | XXc) & Xd), 4,64, 4,64, 5,80, 5,80
|
||||
GF((b | Fa) & (b R Xb)), 2,4, 2,4, 3,6, 3,12
|
||||
G(F(a & Xa) & F(a & X!a)), 2,4, 2,4, 4,8, 4,8
|
||||
EOF
|
||||
|
||||
ltl2tgba -Fformulas/1 --stats='%f, %s,%t' |
|
||||
|
|
|
|||
|
|
@ -426,7 +426,7 @@ State: 1
|
|||
--END--
|
||||
HOA: v1
|
||||
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
|
||||
States: 6
|
||||
States: 5
|
||||
Start: 0
|
||||
AP: 3 "p0" "p1" "p2"
|
||||
acc-name: Buchi
|
||||
|
|
@ -435,23 +435,21 @@ properties: trans-labels explicit-labels trans-acc
|
|||
--BODY--
|
||||
State: 0
|
||||
[0] 0
|
||||
[t] 2
|
||||
[0&1&2] 3
|
||||
[!0] 1
|
||||
[0&1&2] 2
|
||||
State: 1
|
||||
[2] 4
|
||||
State: 2
|
||||
[t] 3
|
||||
[1&2] 4
|
||||
[t] 5
|
||||
State: 2
|
||||
[!0] 1
|
||||
[0&!1&2] 2
|
||||
[0&1&2] 2 {0}
|
||||
State: 3
|
||||
[2] 1
|
||||
[0&!1&2] 3
|
||||
[0&1&2] 3 {0}
|
||||
[0] 3
|
||||
[0&1&2] 4
|
||||
State: 4
|
||||
[0&!1&2] 4
|
||||
[0&1&2] 4 {0}
|
||||
State: 5
|
||||
[0&1&2] 4
|
||||
[0] 5
|
||||
--END--
|
||||
HOA: v1
|
||||
name: "FGa"
|
||||
|
|
@ -489,7 +487,7 @@ State: 1
|
|||
--END--
|
||||
HOA: v1
|
||||
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
|
||||
States: 6
|
||||
States: 5
|
||||
Start: 0
|
||||
AP: 3 "p0" "p1" "p2"
|
||||
acc-name: Rabin 1
|
||||
|
|
@ -498,23 +496,21 @@ properties: trans-labels explicit-labels trans-acc
|
|||
--BODY--
|
||||
State: 0
|
||||
[0] 0
|
||||
[t] 2
|
||||
[0&1&2] 3
|
||||
[!0] 1
|
||||
[0&1&2] 2
|
||||
State: 1
|
||||
[2] 4
|
||||
State: 2
|
||||
[t] 3
|
||||
[1&2] 4
|
||||
[t] 5
|
||||
State: 2
|
||||
[!0] 1
|
||||
[0&!1&2] 2
|
||||
[0&1&2] 2 {1}
|
||||
State: 3
|
||||
[2] 1
|
||||
[0&!1&2] 3
|
||||
[0&1&2] 3 {1}
|
||||
[0] 3
|
||||
[0&1&2] 4
|
||||
State: 4
|
||||
[0&!1&2] 4
|
||||
[0&1&2] 4 {1}
|
||||
State: 5
|
||||
[0&1&2] 4
|
||||
[0] 5
|
||||
--END--
|
||||
HOA: v1
|
||||
name: "FGa"
|
||||
|
|
@ -552,7 +548,7 @@ State: 1
|
|||
--END--
|
||||
HOA: v1
|
||||
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
|
||||
States: 6
|
||||
States: 5
|
||||
Start: 0
|
||||
AP: 3 "p0" "p1" "p2"
|
||||
acc-name: Buchi
|
||||
|
|
@ -561,23 +557,21 @@ properties: trans-labels explicit-labels trans-acc
|
|||
--BODY--
|
||||
State: 0
|
||||
[0] 0
|
||||
[t] 2
|
||||
[0&1&2] 3
|
||||
[!0] 1
|
||||
[0&1&2] 2
|
||||
State: 1
|
||||
[2] 4
|
||||
State: 2
|
||||
[t] 3
|
||||
[1&2] 4
|
||||
[t] 5
|
||||
State: 2
|
||||
[!0] 1
|
||||
[0&!1&2] 2
|
||||
[0&1&2] 2 {0}
|
||||
State: 3
|
||||
[2] 1
|
||||
[0&!1&2] 3
|
||||
[0&1&2] 3 {0}
|
||||
[0] 3
|
||||
[0&1&2] 4
|
||||
State: 4
|
||||
[0&!1&2] 4
|
||||
[0&1&2] 4 {0}
|
||||
State: 5
|
||||
[0&1&2] 4
|
||||
[0] 5
|
||||
--END--
|
||||
HOA: v1
|
||||
name: "FGa"
|
||||
|
|
@ -615,7 +609,7 @@ State: 1
|
|||
--END--
|
||||
HOA: v1
|
||||
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
|
||||
States: 6
|
||||
States: 5
|
||||
Start: 0
|
||||
AP: 3 "p0" "p1" "p2"
|
||||
acc-name: Streett 1
|
||||
|
|
@ -624,23 +618,21 @@ properties: trans-labels explicit-labels trans-acc colored
|
|||
--BODY--
|
||||
State: 0
|
||||
[0] 0 {0}
|
||||
[t] 2 {0}
|
||||
[0&1&2] 3 {0}
|
||||
[!0] 1 {0}
|
||||
[0&1&2] 2 {0}
|
||||
State: 1
|
||||
[2] 4 {0}
|
||||
State: 2
|
||||
[t] 3 {0}
|
||||
[1&2] 4 {0}
|
||||
[t] 5 {0}
|
||||
State: 2
|
||||
[!0] 1 {0}
|
||||
[0&!1&2] 2 {0}
|
||||
[0&1&2] 2 {1}
|
||||
State: 3
|
||||
[2] 1 {0}
|
||||
[0&!1&2] 3 {0}
|
||||
[0&1&2] 3 {1}
|
||||
[0] 3 {0}
|
||||
[0&1&2] 4 {0}
|
||||
State: 4
|
||||
[0&!1&2] 4 {0}
|
||||
[0&1&2] 4 {1}
|
||||
State: 5
|
||||
[0&1&2] 4 {0}
|
||||
[0] 5 {0}
|
||||
--END--
|
||||
HOA: v1
|
||||
name: "FGa"
|
||||
|
|
@ -678,7 +670,7 @@ State: 1
|
|||
--END--
|
||||
HOA: v1
|
||||
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
|
||||
States: 6
|
||||
States: 5
|
||||
Start: 0
|
||||
AP: 3 "p0" "p1" "p2"
|
||||
acc-name: parity min odd 3
|
||||
|
|
@ -687,23 +679,21 @@ properties: trans-labels explicit-labels trans-acc colored
|
|||
--BODY--
|
||||
State: 0
|
||||
[0] 0 {2}
|
||||
[t] 2 {2}
|
||||
[0&1&2] 3 {2}
|
||||
[!0] 1 {2}
|
||||
[0&1&2] 2 {2}
|
||||
State: 1
|
||||
[2] 4 {2}
|
||||
State: 2
|
||||
[t] 3 {2}
|
||||
[1&2] 4 {2}
|
||||
[t] 5 {2}
|
||||
State: 2
|
||||
[!0] 1 {2}
|
||||
[0&!1&2] 2 {2}
|
||||
[0&1&2] 2 {1}
|
||||
State: 3
|
||||
[2] 1 {2}
|
||||
[0&!1&2] 3 {2}
|
||||
[0&1&2] 3 {1}
|
||||
[0] 3 {2}
|
||||
[0&1&2] 4 {2}
|
||||
State: 4
|
||||
[0&!1&2] 4 {2}
|
||||
[0&1&2] 4 {1}
|
||||
State: 5
|
||||
[0&1&2] 4 {2}
|
||||
[0] 5 {2}
|
||||
--END--
|
||||
HOA: v1
|
||||
name: "FGa"
|
||||
|
|
@ -741,7 +731,7 @@ State: 1
|
|||
--END--
|
||||
HOA: v1
|
||||
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
|
||||
States: 6
|
||||
States: 5
|
||||
Start: 0
|
||||
AP: 3 "p0" "p1" "p2"
|
||||
acc-name: parity max even 3
|
||||
|
|
@ -750,23 +740,21 @@ properties: trans-labels explicit-labels trans-acc colored
|
|||
--BODY--
|
||||
State: 0
|
||||
[0] 0 {1}
|
||||
[t] 2 {1}
|
||||
[0&1&2] 3 {1}
|
||||
[!0] 1 {1}
|
||||
[0&1&2] 2 {1}
|
||||
State: 1
|
||||
[2] 4 {1}
|
||||
State: 2
|
||||
[t] 3 {1}
|
||||
[1&2] 4 {1}
|
||||
[t] 5 {1}
|
||||
State: 2
|
||||
[!0] 1 {1}
|
||||
[0&!1&2] 2 {1}
|
||||
[0&1&2] 2 {2}
|
||||
State: 3
|
||||
[2] 1 {1}
|
||||
[0&!1&2] 3 {1}
|
||||
[0&1&2] 3 {2}
|
||||
[0] 3 {1}
|
||||
[0&1&2] 4 {1}
|
||||
State: 4
|
||||
[0&!1&2] 4 {1}
|
||||
[0&1&2] 4 {2}
|
||||
State: 5
|
||||
[0&1&2] 4 {1}
|
||||
[0] 5 {1}
|
||||
--END--
|
||||
EOF
|
||||
diff expected2 res2
|
||||
|
|
@ -1182,7 +1170,7 @@ State: 1
|
|||
--END--
|
||||
HOA: v1
|
||||
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
|
||||
States: 10
|
||||
States: 5
|
||||
Start: 0
|
||||
AP: 3 "p0" "p1" "p2"
|
||||
acc-name: Rabin 1
|
||||
|
|
@ -1190,46 +1178,24 @@ Acceptance: 2 Fin(0) & Inf(1)
|
|||
properties: trans-labels explicit-labels trans-acc deterministic
|
||||
--BODY--
|
||||
State: 0
|
||||
[0&!1 | 0&!2] 0
|
||||
[!0] 1
|
||||
[0&!1 | 0&!2] 2
|
||||
[0&1&2] 3
|
||||
[0&1&2] 2
|
||||
State: 1
|
||||
[!1 | !2] 4
|
||||
[1&2] 5
|
||||
[!1 | !2] 3
|
||||
[1&2] 4
|
||||
State: 2
|
||||
[!0&!1 | !0&!2] 1
|
||||
[0&!1 | 0&!2] 2
|
||||
[0&1&2] 3
|
||||
[!0&1&2] 6
|
||||
[0&!2] 0 {0}
|
||||
[!0] 1
|
||||
[0&!1&2] 2
|
||||
[0&1&2] 2 {1}
|
||||
State: 3
|
||||
[!0&!2] 1
|
||||
[0&!2] 2 {0}
|
||||
[!0&!1&2] 7
|
||||
[!0&1&2] 8
|
||||
[0&!1&2] 9
|
||||
[0&1&2] 9 {1}
|
||||
[0&!1 | 0&!2] 3
|
||||
[0&1&2] 4
|
||||
State: 4
|
||||
[0&!1 | 0&!2] 4
|
||||
[0&1&2] 5
|
||||
State: 5
|
||||
[0&!2] 4 {0}
|
||||
[0&!1&2] 5
|
||||
[0&1&2] 5 {1}
|
||||
State: 6
|
||||
[!0&!1 | !2] 4
|
||||
[0&2 | 1&2] 5
|
||||
State: 7
|
||||
[!2] 4
|
||||
[2] 5
|
||||
State: 8
|
||||
[!2] 4
|
||||
[2] 5
|
||||
State: 9
|
||||
[!0&!2] 1
|
||||
[0&!2] 2 {0}
|
||||
[!0&2] 8
|
||||
[0&!1&2] 9
|
||||
[0&1&2] 9 {1}
|
||||
[0&!2] 3 {0}
|
||||
[0&!1&2] 4
|
||||
[0&1&2] 4 {1}
|
||||
--END--
|
||||
HOA: v1
|
||||
name: "FGa"
|
||||
|
|
@ -1268,7 +1234,7 @@ State: 1
|
|||
--END--
|
||||
HOA: v1
|
||||
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
|
||||
States: 10
|
||||
States: 5
|
||||
Start: 0
|
||||
AP: 3 "p0" "p1" "p2"
|
||||
acc-name: Rabin 1
|
||||
|
|
@ -1276,46 +1242,24 @@ Acceptance: 2 Fin(0) & Inf(1)
|
|||
properties: trans-labels explicit-labels trans-acc deterministic
|
||||
--BODY--
|
||||
State: 0
|
||||
[0&!1 | 0&!2] 0
|
||||
[!0] 1
|
||||
[0&!1 | 0&!2] 2
|
||||
[0&1&2] 3
|
||||
[0&1&2] 2
|
||||
State: 1
|
||||
[!1 | !2] 4
|
||||
[1&2] 5
|
||||
[!1 | !2] 3
|
||||
[1&2] 4
|
||||
State: 2
|
||||
[!0&!1 | !0&!2] 1
|
||||
[0&!1 | 0&!2] 2
|
||||
[0&1&2] 3
|
||||
[!0&1&2] 6
|
||||
[0&!2] 0 {0}
|
||||
[!0] 1
|
||||
[0&!1&2] 2
|
||||
[0&1&2] 2 {1}
|
||||
State: 3
|
||||
[!0&!2] 1
|
||||
[0&!2] 2 {0}
|
||||
[!0&!1&2] 7
|
||||
[!0&1&2] 8
|
||||
[0&!1&2] 9
|
||||
[0&1&2] 9 {1}
|
||||
[0&!1 | 0&!2] 3
|
||||
[0&1&2] 4
|
||||
State: 4
|
||||
[0&!1 | 0&!2] 4
|
||||
[0&1&2] 5
|
||||
State: 5
|
||||
[0&!2] 4 {0}
|
||||
[0&!1&2] 5
|
||||
[0&1&2] 5 {1}
|
||||
State: 6
|
||||
[!0&!1 | !2] 4
|
||||
[0&2 | 1&2] 5
|
||||
State: 7
|
||||
[!2] 4
|
||||
[2] 5
|
||||
State: 8
|
||||
[!2] 4
|
||||
[2] 5
|
||||
State: 9
|
||||
[!0&!2] 1
|
||||
[0&!2] 2 {0}
|
||||
[!0&2] 8
|
||||
[0&!1&2] 9
|
||||
[0&1&2] 9 {1}
|
||||
[0&!2] 3 {0}
|
||||
[0&!1&2] 4
|
||||
[0&1&2] 4 {1}
|
||||
--END--
|
||||
HOA: v1
|
||||
name: "FGa"
|
||||
|
|
@ -1354,7 +1298,7 @@ State: 1
|
|||
--END--
|
||||
HOA: v1
|
||||
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
|
||||
States: 10
|
||||
States: 5
|
||||
Start: 0
|
||||
AP: 3 "p0" "p1" "p2"
|
||||
acc-name: parity max even 2
|
||||
|
|
@ -1362,46 +1306,24 @@ Acceptance: 2 Fin(1) & Inf(0)
|
|||
properties: trans-labels explicit-labels trans-acc deterministic
|
||||
--BODY--
|
||||
State: 0
|
||||
[0&!1 | 0&!2] 0
|
||||
[!0] 1
|
||||
[0&!1 | 0&!2] 2
|
||||
[0&1&2] 3
|
||||
[0&1&2] 2
|
||||
State: 1
|
||||
[!1 | !2] 4
|
||||
[1&2] 5
|
||||
[!1 | !2] 3
|
||||
[1&2] 4
|
||||
State: 2
|
||||
[!0&!1 | !0&!2] 1
|
||||
[0&!1 | 0&!2] 2
|
||||
[0&1&2] 3
|
||||
[!0&1&2] 6
|
||||
[0&!2] 0 {1}
|
||||
[!0] 1
|
||||
[0&!1&2] 2
|
||||
[0&1&2] 2 {0}
|
||||
State: 3
|
||||
[!0&!2] 1
|
||||
[0&!2] 2 {1}
|
||||
[!0&!1&2] 7
|
||||
[!0&1&2] 8
|
||||
[0&!1&2] 9
|
||||
[0&1&2] 9 {0}
|
||||
[0&!1 | 0&!2] 3
|
||||
[0&1&2] 4
|
||||
State: 4
|
||||
[0&!1 | 0&!2] 4
|
||||
[0&1&2] 5
|
||||
State: 5
|
||||
[0&!2] 4 {1}
|
||||
[0&!1&2] 5
|
||||
[0&1&2] 5 {0}
|
||||
State: 6
|
||||
[!0&!1 | !2] 4
|
||||
[0&2 | 1&2] 5
|
||||
State: 7
|
||||
[!2] 4
|
||||
[2] 5
|
||||
State: 8
|
||||
[!2] 4
|
||||
[2] 5
|
||||
State: 9
|
||||
[!0&!2] 1
|
||||
[0&!2] 2 {1}
|
||||
[!0&2] 8
|
||||
[0&!1&2] 9
|
||||
[0&1&2] 9 {0}
|
||||
[0&!2] 3 {1}
|
||||
[0&!1&2] 4
|
||||
[0&1&2] 4 {0}
|
||||
--END--
|
||||
HOA: v1
|
||||
name: "FGa"
|
||||
|
|
@ -1440,7 +1362,7 @@ State: 1
|
|||
--END--
|
||||
HOA: v1
|
||||
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
|
||||
States: 10
|
||||
States: 5
|
||||
Start: 0
|
||||
AP: 3 "p0" "p1" "p2"
|
||||
acc-name: parity min odd 3
|
||||
|
|
@ -1449,46 +1371,24 @@ properties: trans-labels explicit-labels trans-acc colored
|
|||
properties: deterministic
|
||||
--BODY--
|
||||
State: 0
|
||||
[0&!1 | 0&!2] 0 {2}
|
||||
[!0] 1 {2}
|
||||
[0&!1 | 0&!2] 2 {2}
|
||||
[0&1&2] 3 {2}
|
||||
[0&1&2] 2 {2}
|
||||
State: 1
|
||||
[!1 | !2] 4 {2}
|
||||
[1&2] 5 {2}
|
||||
[!1 | !2] 3 {2}
|
||||
[1&2] 4 {2}
|
||||
State: 2
|
||||
[!0&!1 | !0&!2] 1 {2}
|
||||
[0&!1 | 0&!2] 2 {2}
|
||||
[0&1&2] 3 {2}
|
||||
[!0&1&2] 6 {2}
|
||||
[0&!2] 0 {0}
|
||||
[!0] 1 {2}
|
||||
[0&!1&2] 2 {2}
|
||||
[0&1&2] 2 {1}
|
||||
State: 3
|
||||
[!0&!2] 1 {2}
|
||||
[0&!2] 2 {0}
|
||||
[!0&!1&2] 7 {2}
|
||||
[!0&1&2] 8 {2}
|
||||
[0&!1&2] 9 {2}
|
||||
[0&1&2] 9 {1}
|
||||
[0&!1 | 0&!2] 3 {2}
|
||||
[0&1&2] 4 {2}
|
||||
State: 4
|
||||
[0&!1 | 0&!2] 4 {2}
|
||||
[0&1&2] 5 {2}
|
||||
State: 5
|
||||
[0&!2] 4 {0}
|
||||
[0&!1&2] 5 {2}
|
||||
[0&1&2] 5 {1}
|
||||
State: 6
|
||||
[!0&!1 | !2] 4 {2}
|
||||
[0&2 | 1&2] 5 {2}
|
||||
State: 7
|
||||
[!2] 4 {2}
|
||||
[2] 5 {2}
|
||||
State: 8
|
||||
[!2] 4 {2}
|
||||
[2] 5 {2}
|
||||
State: 9
|
||||
[!0&!2] 1 {2}
|
||||
[0&!2] 2 {0}
|
||||
[!0&2] 8 {2}
|
||||
[0&!1&2] 9 {2}
|
||||
[0&1&2] 9 {1}
|
||||
[0&!2] 3 {0}
|
||||
[0&!1&2] 4 {2}
|
||||
[0&1&2] 4 {1}
|
||||
--END--
|
||||
HOA: v1
|
||||
name: "FGa"
|
||||
|
|
@ -1527,7 +1427,7 @@ State: 1
|
|||
--END--
|
||||
HOA: v1
|
||||
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
|
||||
States: 10
|
||||
States: 5
|
||||
Start: 0
|
||||
AP: 3 "p0" "p1" "p2"
|
||||
acc-name: parity min odd 3
|
||||
|
|
@ -1536,46 +1436,24 @@ properties: trans-labels explicit-labels trans-acc colored
|
|||
properties: deterministic
|
||||
--BODY--
|
||||
State: 0
|
||||
[0&!1 | 0&!2] 0 {2}
|
||||
[!0] 1 {2}
|
||||
[0&!1 | 0&!2] 2 {2}
|
||||
[0&1&2] 3 {2}
|
||||
[0&1&2] 2 {2}
|
||||
State: 1
|
||||
[!1 | !2] 4 {2}
|
||||
[1&2] 5 {2}
|
||||
[!1 | !2] 3 {2}
|
||||
[1&2] 4 {2}
|
||||
State: 2
|
||||
[!0&!1 | !0&!2] 1 {2}
|
||||
[0&!1 | 0&!2] 2 {2}
|
||||
[0&1&2] 3 {2}
|
||||
[!0&1&2] 6 {2}
|
||||
[0&!2] 0 {0}
|
||||
[!0] 1 {2}
|
||||
[0&!1&2] 2 {2}
|
||||
[0&1&2] 2 {1}
|
||||
State: 3
|
||||
[!0&!2] 1 {2}
|
||||
[0&!2] 2 {0}
|
||||
[!0&!1&2] 7 {2}
|
||||
[!0&1&2] 8 {2}
|
||||
[0&!1&2] 9 {2}
|
||||
[0&1&2] 9 {1}
|
||||
[0&!1 | 0&!2] 3 {2}
|
||||
[0&1&2] 4 {2}
|
||||
State: 4
|
||||
[0&!1 | 0&!2] 4 {2}
|
||||
[0&1&2] 5 {2}
|
||||
State: 5
|
||||
[0&!2] 4 {0}
|
||||
[0&!1&2] 5 {2}
|
||||
[0&1&2] 5 {1}
|
||||
State: 6
|
||||
[!0&!1 | !2] 4 {2}
|
||||
[0&2 | 1&2] 5 {2}
|
||||
State: 7
|
||||
[!2] 4 {2}
|
||||
[2] 5 {2}
|
||||
State: 8
|
||||
[!2] 4 {2}
|
||||
[2] 5 {2}
|
||||
State: 9
|
||||
[!0&!2] 1 {2}
|
||||
[0&!2] 2 {0}
|
||||
[!0&2] 8 {2}
|
||||
[0&!1&2] 9 {2}
|
||||
[0&1&2] 9 {1}
|
||||
[0&!2] 3 {0}
|
||||
[0&!1&2] 4 {2}
|
||||
[0&1&2] 4 {1}
|
||||
--END--
|
||||
HOA: v1
|
||||
name: "FGa"
|
||||
|
|
@ -1614,7 +1492,7 @@ State: 1
|
|||
--END--
|
||||
HOA: v1
|
||||
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
|
||||
States: 10
|
||||
States: 5
|
||||
Start: 0
|
||||
AP: 3 "p0" "p1" "p2"
|
||||
acc-name: parity max even 4
|
||||
|
|
@ -1623,46 +1501,24 @@ properties: trans-labels explicit-labels trans-acc colored
|
|||
properties: deterministic
|
||||
--BODY--
|
||||
State: 0
|
||||
[0&!1 | 0&!2] 0 {1}
|
||||
[!0] 1 {1}
|
||||
[0&!1 | 0&!2] 2 {1}
|
||||
[0&1&2] 3 {1}
|
||||
[0&1&2] 2 {1}
|
||||
State: 1
|
||||
[!1 | !2] 4 {1}
|
||||
[1&2] 5 {1}
|
||||
[!1 | !2] 3 {1}
|
||||
[1&2] 4 {1}
|
||||
State: 2
|
||||
[!0&!1 | !0&!2] 1 {1}
|
||||
[0&!1 | 0&!2] 2 {1}
|
||||
[0&1&2] 3 {1}
|
||||
[!0&1&2] 6 {1}
|
||||
[0&!2] 0 {3}
|
||||
[!0] 1 {1}
|
||||
[0&!1&2] 2 {1}
|
||||
[0&1&2] 2 {2}
|
||||
State: 3
|
||||
[!0&!2] 1 {1}
|
||||
[0&!2] 2 {3}
|
||||
[!0&!1&2] 7 {1}
|
||||
[!0&1&2] 8 {1}
|
||||
[0&!1&2] 9 {1}
|
||||
[0&1&2] 9 {2}
|
||||
[0&!1 | 0&!2] 3 {1}
|
||||
[0&1&2] 4 {1}
|
||||
State: 4
|
||||
[0&!1 | 0&!2] 4 {1}
|
||||
[0&1&2] 5 {1}
|
||||
State: 5
|
||||
[0&!2] 4 {3}
|
||||
[0&!1&2] 5 {1}
|
||||
[0&1&2] 5 {2}
|
||||
State: 6
|
||||
[!0&!1 | !2] 4 {1}
|
||||
[0&2 | 1&2] 5 {1}
|
||||
State: 7
|
||||
[!2] 4 {1}
|
||||
[2] 5 {1}
|
||||
State: 8
|
||||
[!2] 4 {1}
|
||||
[2] 5 {1}
|
||||
State: 9
|
||||
[!0&!2] 1 {1}
|
||||
[0&!2] 2 {3}
|
||||
[!0&2] 8 {1}
|
||||
[0&!1&2] 9 {1}
|
||||
[0&1&2] 9 {2}
|
||||
[0&!2] 3 {3}
|
||||
[0&!1&2] 4 {1}
|
||||
[0&1&2] 4 {2}
|
||||
--END--
|
||||
EOF
|
||||
diff expected4 res4
|
||||
|
|
|
|||
|
|
@ -26,13 +26,13 @@ ltl2tgba '!FG(a | Xa | G!a)' -H | autfilt -H --destut > pos.hoa
|
|||
ltl2tgba 'FG(a | Xa | G!a)' -H | autfilt -H --destut > neg.hoa
|
||||
autfilt pos.hoa --product neg.hoa -H > prod.hoa
|
||||
autfilt --is-empty prod.hoa -q && exit 1
|
||||
autfilt --states=7 prod.hoa -q
|
||||
autfilt --states=5 prod.hoa -q
|
||||
|
||||
ltl2tgba '!FG(a | Xa | G!a)' -H | autfilt -H --instut > pos.hoa
|
||||
ltl2tgba 'FG(a | Xa | G!a)' -H | autfilt -H --instut > neg.hoa
|
||||
autfilt pos.hoa --product neg.hoa -H > prod.hoa
|
||||
autfilt --is-empty prod.hoa -q && exit 1
|
||||
autfilt --states=9 prod.hoa -q
|
||||
autfilt --states=6 prod.hoa -q
|
||||
|
||||
|
||||
# Check for issue #7.
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -302,7 +302,7 @@
|
|||
"</svg>\n"
|
||||
],
|
||||
"text/plain": [
|
||||
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f31a00c1660> >"
|
||||
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f68605f5630> >"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
|
|
@ -595,7 +595,7 @@
|
|||
"</svg>\n"
|
||||
],
|
||||
"text/plain": [
|
||||
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f31a00c1b40> >"
|
||||
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f68605f5ae0> >"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
|
|
@ -804,7 +804,7 @@
|
|||
"</svg>\n"
|
||||
],
|
||||
"text/plain": [
|
||||
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f31a00c1b40> >"
|
||||
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f68605f5ae0> >"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
|
|
@ -890,18 +890,18 @@
|
|||
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
|
||||
" -->\n",
|
||||
"<!-- Title: G(F(a & Xa) & F!a) Pages: 1 -->\n",
|
||||
"<svg width=\"170pt\" height=\"178pt\"\n",
|
||||
" viewBox=\"0.00 0.00 170.00 177.59\" 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 173.5945)\">\n",
|
||||
"<svg width=\"170pt\" height=\"145pt\"\n",
|
||||
" viewBox=\"0.00 0.00 170.00 144.59\" 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 140.5945)\">\n",
|
||||
"<title>G(F(a & Xa) & F!a)</title>\n",
|
||||
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-173.5945 166,-173.5945 166,4 -4,4\"/>\n",
|
||||
"<text text-anchor=\"start\" x=\"25\" y=\"-155.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">G(F(a & Xa) & F!a)</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"34\" y=\"-141.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">Inf(</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"56\" y=\"-141.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"72\" y=\"-141.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)&Inf(</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"108\" y=\"-141.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"124\" y=\"-141.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"37\" y=\"-127.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">[gen. Büchi 2]</text>\n",
|
||||
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-140.5945 166,-140.5945 166,4 -4,4\"/>\n",
|
||||
"<text text-anchor=\"start\" x=\"25\" y=\"-122.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">G(F(a & Xa) & F!a)</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"34\" y=\"-108.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">Inf(</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"56\" y=\"-108.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"72\" y=\"-108.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)&Inf(</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"108\" y=\"-108.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"124\" y=\"-108.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"37\" y=\"-94.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">[gen. Büchi 2]</text>\n",
|
||||
"<!-- I -->\n",
|
||||
"<!-- 0 -->\n",
|
||||
"<g id=\"node2\" class=\"node\">\n",
|
||||
|
|
@ -918,17 +918,10 @@
|
|||
"<!-- 0->0 -->\n",
|
||||
"<g id=\"edge2\" class=\"edge\">\n",
|
||||
"<title>0->0</title>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M52.7643,-38.3763C52.2144,-47.9095 53.293,-56.5945 56,-56.5945 57.988,-56.5945 59.0977,-51.9106 59.3292,-45.6466\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"59.2357,-38.3763 62.4756,-45.3351 59.2808,-41.876 59.3258,-45.3757 59.3258,-45.3757 59.3258,-45.3757 59.2808,-41.876 56.1761,-45.4162 59.2357,-38.3763 59.2357,-38.3763\"/>\n",
|
||||
"<text text-anchor=\"start\" x=\"50.5\" y=\"-75.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"48\" y=\"-60.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||
"</g>\n",
|
||||
"<!-- 0->0 -->\n",
|
||||
"<g id=\"edge3\" class=\"edge\">\n",
|
||||
"<title>0->0</title>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M50.9906,-38.1717C47.5451,-59.3126 49.2148,-86.5945 56,-86.5945 62.043,-86.5945 64.0285,-64.9541 61.9564,-45.2852\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"61.0094,-38.1717 65.0556,-44.6947 61.4713,-41.6411 61.9332,-45.1105 61.9332,-45.1105 61.9332,-45.1105 61.4713,-41.6411 58.8107,-45.5262 61.0094,-38.1717 61.0094,-38.1717\"/>\n",
|
||||
"<text text-anchor=\"start\" x=\"52.5\" y=\"-90.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M49.6208,-37.6318C48.3189,-47.4524 50.4453,-56.5945 56,-56.5945 60.166,-56.5945 62.4036,-51.4521 62.7128,-44.7378\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"62.3792,-37.6318 65.8541,-44.4764 62.5434,-41.128 62.7076,-44.6241 62.7076,-44.6241 62.7076,-44.6241 62.5434,-41.128 59.561,-44.7719 62.3792,-37.6318 62.3792,-37.6318\"/>\n",
|
||||
"<text text-anchor=\"start\" x=\"52.5\" y=\"-75.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"48\" y=\"-60.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||
"</g>\n",
|
||||
"<!-- 1 -->\n",
|
||||
"<g id=\"node3\" class=\"node\">\n",
|
||||
|
|
@ -937,33 +930,33 @@
|
|||
"<text text-anchor=\"middle\" x=\"144\" y=\"-16.8945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
|
||||
"</g>\n",
|
||||
"<!-- 0->1 -->\n",
|
||||
"<g id=\"edge4\" class=\"edge\">\n",
|
||||
"<g id=\"edge3\" class=\"edge\">\n",
|
||||
"<title>0->1</title>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M74.2337,-20.5945C87.0948,-20.5945 104.4907,-20.5945 118.6942,-20.5945\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"125.7897,-20.5945 118.7897,-23.7446 122.2897,-20.5946 118.7897,-20.5946 118.7897,-20.5946 118.7897,-20.5946 122.2897,-20.5946 118.7897,-17.4446 125.7897,-20.5945 125.7897,-20.5945\"/>\n",
|
||||
"<text text-anchor=\"start\" x=\"96.5\" y=\"-39.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"92\" y=\"-24.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"94.5\" y=\"-39.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"92\" y=\"-24.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||
"</g>\n",
|
||||
"<!-- 1->0 -->\n",
|
||||
"<g id=\"edge5\" class=\"edge\">\n",
|
||||
"<g id=\"edge4\" class=\"edge\">\n",
|
||||
"<title>1->0</title>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M129.247,-10.1729C118.9796,-4.1758 104.8748,1.5945 92,-1.5945 87.1146,-2.8046 82.1612,-4.8119 77.5558,-7.0792\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"71.1057,-10.5245 75.7959,-4.448 74.1929,-8.8755 77.2801,-7.2264 77.2801,-7.2264 77.2801,-7.2264 74.1929,-8.8755 78.7642,-10.0049 71.1057,-10.5245 71.1057,-10.5245\"/>\n",
|
||||
"<text text-anchor=\"start\" x=\"96.5\" y=\"-5.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
||||
"</g>\n",
|
||||
"<!-- 1->1 -->\n",
|
||||
"<g id=\"edge6\" class=\"edge\">\n",
|
||||
"<g id=\"edge5\" class=\"edge\">\n",
|
||||
"<title>1->1</title>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M136.3321,-36.8848C134.4831,-46.9837 137.0391,-56.5945 144,-56.5945 149.2207,-56.5945 151.9636,-51.1884 152.2287,-44.2249\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"151.6679,-36.8848 155.3421,-43.6244 151.9346,-40.3746 152.2013,-43.8645 152.2013,-43.8645 152.2013,-43.8645 151.9346,-40.3746 149.0604,-44.1045 151.6679,-36.8848 151.6679,-36.8848\"/>\n",
|
||||
"<text text-anchor=\"start\" x=\"140.5\" y=\"-75.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"136\" y=\"-60.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"138.5\" y=\"-75.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"136\" y=\"-60.3945\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||
"</g>\n",
|
||||
"</g>\n",
|
||||
"</svg>\n"
|
||||
],
|
||||
"text/plain": [
|
||||
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f31a00c1630> >"
|
||||
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f68605f5a50> >"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
|
|
@ -1061,7 +1054,7 @@
|
|||
"</svg>\n"
|
||||
],
|
||||
"text/plain": [
|
||||
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f31a0114060> >"
|
||||
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f68605f5b70> >"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
|
|
@ -1101,18 +1094,18 @@
|
|||
"<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
|
||||
" -->\n",
|
||||
"<!-- Pages: 1 -->\n",
|
||||
"<svg width=\"338pt\" height=\"360pt\"\n",
|
||||
" viewBox=\"0.00 0.00 337.98 360.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
|
||||
"<g id=\"graph0\" class=\"graph\" transform=\"scale(.997 .997) rotate(0) translate(4 357.0877)\">\n",
|
||||
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-357.0877 335,-357.0877 335,4 -4,4\"/>\n",
|
||||
"<text text-anchor=\"start\" x=\"89\" y=\"-338.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">(Inf(</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"114\" y=\"-338.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"130\" y=\"-338.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)&Inf(</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"166\" y=\"-338.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"182\" y=\"-338.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)) | Inf(</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"222\" y=\"-338.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"238\" y=\"-338.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"130.5\" y=\"-324.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">[Fin-less 3]</text>\n",
|
||||
"<svg width=\"339pt\" height=\"328pt\"\n",
|
||||
" viewBox=\"0.00 0.00 339.00 328.09\" 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 324.0877)\">\n",
|
||||
"<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-324.0877 335,-324.0877 335,4 -4,4\"/>\n",
|
||||
"<text text-anchor=\"start\" x=\"89\" y=\"-305.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">(Inf(</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"114\" y=\"-305.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"130\" y=\"-305.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)&Inf(</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"166\" y=\"-305.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"182\" y=\"-305.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)) | Inf(</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"222\" y=\"-305.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"238\" y=\"-305.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">)</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"130.5\" y=\"-291.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">[Fin-less 3]</text>\n",
|
||||
"<!-- I -->\n",
|
||||
"<!-- 5 -->\n",
|
||||
"<g id=\"node2\" class=\"node\">\n",
|
||||
|
|
@ -1133,11 +1126,11 @@
|
|||
"<text text-anchor=\"middle\" x=\"137\" y=\"-214.3877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">0</text>\n",
|
||||
"</g>\n",
|
||||
"<!-- 5->0 -->\n",
|
||||
"<g id=\"edge16\" class=\"edge\">\n",
|
||||
"<g id=\"edge14\" class=\"edge\">\n",
|
||||
"<title>5->0</title>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M59.2987,-97.858C63.9004,-119.1522 73.8056,-155.195 92,-181.0877 98.2094,-189.9244 107.068,-197.8267 115.2855,-204.0366\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"121.3899,-208.443 113.8704,-206.9001 118.552,-206.3945 115.7141,-204.346 115.7141,-204.346 115.7141,-204.346 118.552,-206.3945 117.5577,-201.7919 121.3899,-208.443 121.3899,-208.443\"/>\n",
|
||||
"<text text-anchor=\"middle\" x=\"96.5\" y=\"-193.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"93\" y=\"-193.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
||||
"</g>\n",
|
||||
"<!-- 1 -->\n",
|
||||
"<g id=\"node4\" class=\"node\">\n",
|
||||
|
|
@ -1146,11 +1139,11 @@
|
|||
"<text text-anchor=\"middle\" x=\"225\" y=\"-196.3877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
|
||||
"</g>\n",
|
||||
"<!-- 5->1 -->\n",
|
||||
"<g id=\"edge14\" class=\"edge\">\n",
|
||||
"<g id=\"edge12\" class=\"edge\">\n",
|
||||
"<title>5->1</title>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M68.2009,-93.4848C80.3253,-106.3497 99.8305,-125.8734 119,-140.0877 145.785,-159.9489 179.7906,-178.1074 201.959,-189.1251\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"208.4376,-192.3091 200.7659,-192.0486 205.2965,-190.7653 202.1553,-189.2215 202.1553,-189.2215 202.1553,-189.2215 205.2965,-190.7653 203.5447,-186.3945 208.4376,-192.3091 208.4376,-192.3091\"/>\n",
|
||||
"<text text-anchor=\"start\" x=\"133.5\" y=\"-166.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"131.5\" y=\"-166.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a</text>\n",
|
||||
"</g>\n",
|
||||
"<!-- 2 -->\n",
|
||||
"<g id=\"node5\" class=\"node\">\n",
|
||||
|
|
@ -1159,7 +1152,7 @@
|
|||
"<text text-anchor=\"middle\" x=\"137\" y=\"-76.3877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">2</text>\n",
|
||||
"</g>\n",
|
||||
"<!-- 5->2 -->\n",
|
||||
"<g id=\"edge17\" class=\"edge\">\n",
|
||||
"<g id=\"edge16\" class=\"edge\">\n",
|
||||
"<title>5->2</title>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M74.3802,-80.0877C85.4352,-80.0877 99.6622,-80.0877 111.7609,-80.0877\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"118.9716,-80.0877 111.9716,-83.2378 115.4716,-80.0878 111.9716,-80.0878 111.9716,-80.0878 111.9716,-80.0878 115.4716,-80.0878 111.9716,-76.9378 118.9716,-80.0877 118.9716,-80.0877\"/>\n",
|
||||
|
|
@ -1194,64 +1187,57 @@
|
|||
"<!-- 0->0 -->\n",
|
||||
"<g id=\"edge2\" class=\"edge\">\n",
|
||||
"<title>0->0</title>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M133.4047,-235.8695C132.7938,-245.4027 133.9922,-254.0877 137,-254.0877 139.2089,-254.0877 140.4419,-249.4038 140.6991,-243.1398\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"140.5953,-235.8695 143.845,-242.8237 140.6453,-239.3691 140.6954,-242.8687 140.6954,-242.8687 140.6954,-242.8687 140.6453,-239.3691 137.5457,-242.9138 140.5953,-235.8695 140.5953,-235.8695\"/>\n",
|
||||
"<text text-anchor=\"start\" x=\"131.5\" y=\"-272.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"129\" y=\"-257.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||
"</g>\n",
|
||||
"<!-- 0->0 -->\n",
|
||||
"<g id=\"edge3\" class=\"edge\">\n",
|
||||
"<title>0->0</title>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M131.494,-235.3368C127.5865,-256.5223 129.4219,-284.0877 137,-284.0877 143.7493,-284.0877 145.9433,-262.2225 143.582,-242.4728\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"142.506,-235.3368 146.6646,-241.7888 143.0279,-238.7976 143.5498,-242.2585 143.5498,-242.2585 143.5498,-242.2585 143.0279,-238.7976 140.435,-242.7282 142.506,-235.3368 142.506,-235.3368\"/>\n",
|
||||
"<text text-anchor=\"start\" x=\"133.5\" y=\"-287.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M129.9688,-234.7518C128.4063,-244.7127 130.75,-254.0877 137,-254.0877 141.6875,-254.0877 144.1777,-248.8143 144.4707,-241.9753\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"144.0313,-234.7518 147.6006,-241.5475 144.2438,-238.2453 144.4564,-241.7389 144.4564,-241.7389 144.4564,-241.7389 144.2438,-238.2453 141.3122,-241.9302 144.0313,-234.7518 144.0313,-234.7518\"/>\n",
|
||||
"<text text-anchor=\"start\" x=\"133.5\" y=\"-272.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"129\" y=\"-257.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||
"</g>\n",
|
||||
"<!-- 0->1 -->\n",
|
||||
"<g id=\"edge4\" class=\"edge\">\n",
|
||||
"<g id=\"edge3\" class=\"edge\">\n",
|
||||
"<title>0->1</title>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M152.6013,-208.9598C158.7477,-205.8411 166.0013,-202.7279 173,-201.0877 181.5673,-199.0799 191.1475,-198.4558 199.7278,-198.4529\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"206.96,-198.5911 199.9011,-201.6067 203.4607,-198.5242 199.9613,-198.4573 199.9613,-198.4573 199.9613,-198.4573 203.4607,-198.5242 200.0216,-195.3079 206.96,-198.5911 206.96,-198.5911\"/>\n",
|
||||
"<text text-anchor=\"start\" x=\"177.5\" y=\"-219.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"173\" y=\"-204.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"175.5\" y=\"-219.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"173\" y=\"-204.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||
"</g>\n",
|
||||
"<!-- 1->0 -->\n",
|
||||
"<g id=\"edge5\" class=\"edge\">\n",
|
||||
"<g id=\"edge4\" class=\"edge\">\n",
|
||||
"<title>1->0</title>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M213.1708,-214.1226C206.7688,-220.6164 198.2788,-227.6432 189,-231.0877 179.5455,-234.5975 168.7766,-232.8058 159.5007,-229.5722\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"152.7448,-226.8824 160.4135,-226.5452 155.9966,-228.1771 159.2483,-229.4718 159.2483,-229.4718 159.2483,-229.4718 155.9966,-228.1771 158.0831,-232.3984 152.7448,-226.8824 152.7448,-226.8824\"/>\n",
|
||||
"<text text-anchor=\"start\" x=\"177.5\" y=\"-235.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
||||
"</g>\n",
|
||||
"<!-- 1->1 -->\n",
|
||||
"<g id=\"edge6\" class=\"edge\">\n",
|
||||
"<g id=\"edge5\" class=\"edge\">\n",
|
||||
"<title>1->1</title>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M217.3321,-216.378C215.4831,-226.4769 218.0391,-236.0877 225,-236.0877 230.2207,-236.0877 232.9636,-230.6816 233.2287,-223.7181\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"232.6679,-216.378 236.3421,-223.1176 232.9346,-219.8678 233.2013,-223.3577 233.2013,-223.3577 233.2013,-223.3577 232.9346,-219.8678 230.0604,-223.5977 232.6679,-216.378 232.6679,-216.378\"/>\n",
|
||||
"<text text-anchor=\"start\" x=\"221.5\" y=\"-254.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"217\" y=\"-239.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#1f78b4\">⓿</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"219.5\" y=\"-254.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a</text>\n",
|
||||
"<text text-anchor=\"start\" x=\"217\" y=\"-239.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff4da0\">❶</text>\n",
|
||||
"</g>\n",
|
||||
"<!-- 2->2 -->\n",
|
||||
"<g id=\"edge7\" class=\"edge\">\n",
|
||||
"<g id=\"edge6\" class=\"edge\">\n",
|
||||
"<title>2->2</title>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M129.9688,-96.7518C128.4063,-106.7127 130.75,-116.0877 137,-116.0877 141.6875,-116.0877 144.1777,-110.8143 144.4707,-103.9753\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"144.0313,-96.7518 147.6006,-103.5475 144.2438,-100.2453 144.4564,-103.7389 144.4564,-103.7389 144.4564,-103.7389 144.2438,-100.2453 141.3122,-103.9302 144.0313,-96.7518 144.0313,-96.7518\"/>\n",
|
||||
"<text text-anchor=\"middle\" x=\"137\" y=\"-119.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">1</text>\n",
|
||||
"</g>\n",
|
||||
"<!-- 2->3 -->\n",
|
||||
"<g id=\"edge8\" class=\"edge\">\n",
|
||||
"<g id=\"edge7\" class=\"edge\">\n",
|
||||
"<title>2->3</title>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M152.7326,-70.9699C166.7481,-62.8473 187.3994,-50.879 203.0408,-41.8141\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"209.4036,-38.1266 204.9266,-44.362 206.3754,-39.8816 203.3471,-41.6366 203.3471,-41.6366 203.3471,-41.6366 206.3754,-39.8816 201.7676,-38.9112 209.4036,-38.1266 209.4036,-38.1266\"/>\n",
|
||||
"<text text-anchor=\"start\" x=\"175.5\" y=\"-62.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">!a</text>\n",
|
||||
"</g>\n",
|
||||
"<!-- 2->4 -->\n",
|
||||
"<g id=\"edge9\" class=\"edge\">\n",
|
||||
"<g id=\"edge8\" class=\"edge\">\n",
|
||||
"<title>2->4</title>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M153.1296,-88.1435C173.8803,-97.4931 211.0592,-110.8204 243,-104.0877 259.1612,-100.6811 263.6823,-98.8565 277,-89.0877 284.7574,-83.3976 292.0258,-75.7692 297.9722,-68.636\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"302.638,-62.8141 300.7185,-70.2464 300.4492,-65.5453 298.2604,-68.2764 298.2604,-68.2764 298.2604,-68.2764 300.4492,-65.5453 295.8024,-66.3065 302.638,-62.8141 302.638,-62.8141\"/>\n",
|
||||
"<text text-anchor=\"start\" x=\"221.5\" y=\"-108.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#000000\">a</text>\n",
|
||||
"</g>\n",
|
||||
"<!-- 3->3 -->\n",
|
||||
"<g id=\"edge10\" class=\"edge\">\n",
|
||||
"<g id=\"edge9\" class=\"edge\">\n",
|
||||
"<title>3->3</title>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M217.3321,-45.378C215.4831,-55.4769 218.0391,-65.0877 225,-65.0877 230.2207,-65.0877 232.9636,-59.6816 233.2287,-52.7181\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"232.6679,-45.378 236.3421,-52.1176 232.9346,-48.8678 233.2013,-52.3577 233.2013,-52.3577 233.2013,-52.3577 232.9346,-48.8678 230.0604,-52.5977 232.6679,-45.378 232.6679,-45.378\"/>\n",
|
||||
|
|
@ -1259,7 +1245,7 @@
|
|||
"<text text-anchor=\"start\" x=\"217\" y=\"-68.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||
"</g>\n",
|
||||
"<!-- 3->4 -->\n",
|
||||
"<g id=\"edge11\" class=\"edge\">\n",
|
||||
"<g id=\"edge10\" class=\"edge\">\n",
|
||||
"<title>3->4</title>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M242.1973,-23.5921C252.4927,-21.1595 265.7259,-19.557 277,-23.0877 282.9499,-24.951 288.779,-28.1827 293.9551,-31.7158\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"299.6996,-35.938 292.1937,-34.3305 296.8794,-33.8652 294.0593,-31.7923 294.0593,-31.7923 294.0593,-31.7923 296.8794,-33.8652 295.9248,-29.2542 299.6996,-35.938 299.6996,-35.938\"/>\n",
|
||||
|
|
@ -1267,7 +1253,7 @@
|
|||
"<text text-anchor=\"start\" x=\"261\" y=\"-26.8877\" font-family=\"Lato\" font-size=\"14.00\" fill=\"#ff7f00\">❷</text>\n",
|
||||
"</g>\n",
|
||||
"<!-- 4->3 -->\n",
|
||||
"<g id=\"edge12\" class=\"edge\">\n",
|
||||
"<g id=\"edge11\" class=\"edge\">\n",
|
||||
"<title>4->3</title>\n",
|
||||
"<path fill=\"none\" stroke=\"#000000\" d=\"M295.3331,-53.1108C285.1107,-55.2018 272.1107,-56.4518 261,-53.0877 255.3385,-51.3735 249.7535,-48.4429 244.7337,-45.2064\"/>\n",
|
||||
"<polygon fill=\"#000000\" stroke=\"#000000\" points=\"238.7143,-41.0119 246.2584,-42.4296 241.5859,-43.0129 244.4575,-45.014 244.4575,-45.014 244.4575,-45.014 241.5859,-43.0129 242.6565,-47.5984 238.7143,-41.0119 238.7143,-41.0119\"/>\n",
|
||||
|
|
@ -1278,7 +1264,7 @@
|
|||
"</svg>\n"
|
||||
],
|
||||
"text/plain": [
|
||||
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f31a00c1480> >"
|
||||
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f68605f5ba0> >"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
|
|
@ -1407,7 +1393,7 @@
|
|||
"</svg>\n"
|
||||
],
|
||||
"text/plain": [
|
||||
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f31a01140c0> >"
|
||||
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f686063ef30> >"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
|
|
@ -1538,7 +1524,7 @@
|
|||
"</svg>\n"
|
||||
],
|
||||
"text/plain": [
|
||||
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f31a00c1ae0> >"
|
||||
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6860602930> >"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
|
|
@ -1798,7 +1784,7 @@
|
|||
"</svg>\n"
|
||||
],
|
||||
"text/plain": [
|
||||
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f31a005d870> >"
|
||||
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6860591c30> >"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
|
|
@ -2112,7 +2098,7 @@
|
|||
"</svg>\n"
|
||||
],
|
||||
"text/plain": [
|
||||
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f31a005d870> >"
|
||||
"<spot.impl.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f6860591c30> >"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
|
|
@ -2353,7 +2339,7 @@
|
|||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.6.5+"
|
||||
"version": "3.6.6"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue