to_weak_alternating(): fixes a bug on generalized co-Büchi automata
Fixes #278. Also adds a test ensuring non-regression. * spot/twaalgos/toweak.cc: Fixes the bug. * tests/python/toweak.py: Add a test case.
This commit is contained in:
parent
df04c715cf
commit
4b5606e742
2 changed files with 51 additions and 2 deletions
|
|
@ -121,10 +121,11 @@ namespace spot
|
||||||
int curr = static_cast<int>(rank);
|
int curr = static_cast<int>(rank);
|
||||||
// We must always be able to go to the previous even rank
|
// We must always be able to go to the previous even rank
|
||||||
int lower = less_ ? ((curr - 1) & ~1) : 0;
|
int lower = less_ ? ((curr - 1) & ~1) : 0;
|
||||||
for (int i = curr; i >= lower; --i)
|
for (int i = curr, start_set = st.mark.min_set() - 1;
|
||||||
|
i >= lower; --i, start_set = 0)
|
||||||
{
|
{
|
||||||
if (i % 2)
|
if (i % 2)
|
||||||
for (unsigned m = 0; m < numsets_; ++m)
|
for (unsigned m = start_set; m < numsets_; ++m)
|
||||||
levels |= state_to_var_[new_state(d, i, {m})];
|
levels |= state_to_var_[new_state(d, i, {m})];
|
||||||
else
|
else
|
||||||
levels |= state_to_var_[new_state(d, i, 0U)];
|
levels |= state_to_var_[new_state(d, i, 0U)];
|
||||||
|
|
|
||||||
|
|
@ -53,3 +53,51 @@ def test_phi(phi):
|
||||||
|
|
||||||
for p in phi1:
|
for p in phi1:
|
||||||
test_phi(p)
|
test_phi(p)
|
||||||
|
|
||||||
|
|
||||||
|
phi2 = spot.formula("(G((F a) U b)) W a")
|
||||||
|
a2 = spot.automaton("""
|
||||||
|
HOA: v1
|
||||||
|
States: 7
|
||||||
|
Start: 1
|
||||||
|
AP: 2 "a" "b"
|
||||||
|
acc-name: generalized-Buchi 2
|
||||||
|
Acceptance: 2 Inf(0)&Inf(1)
|
||||||
|
properties: trans-labels explicit-labels trans-acc complete univ-branch
|
||||||
|
--BODY--
|
||||||
|
State: 0
|
||||||
|
[t] 0 {0 1}
|
||||||
|
State: 1
|
||||||
|
[0] 0 {0 1}
|
||||||
|
[1] 1&2 {0 1}
|
||||||
|
[0&!1] 1&3 {0 1}
|
||||||
|
[!0&!1] 1&4 {0 1}
|
||||||
|
State: 2
|
||||||
|
[1] 2 {0 1}
|
||||||
|
[0&!1] 3 {0 1}
|
||||||
|
[!0&!1] 4 {0 1}
|
||||||
|
State: 3
|
||||||
|
[1] 2 {0 1}
|
||||||
|
[0&!1] 3 {1}
|
||||||
|
[!0&!1] 4 {1}
|
||||||
|
State: 4
|
||||||
|
[0&1] 2 {0 1}
|
||||||
|
[0&!1] 3 {1}
|
||||||
|
[!0&!1] 4 {1}
|
||||||
|
[!0&1] 5 {0 1}
|
||||||
|
State: 5
|
||||||
|
[0&1] 2 {0 1}
|
||||||
|
[0&!1] 3 {0 1}
|
||||||
|
[!0&1] 5 {0}
|
||||||
|
[!0&!1] 6 {0}
|
||||||
|
State: 6
|
||||||
|
[0&1] 2 {0 1}
|
||||||
|
[0&!1] 3 {1}
|
||||||
|
[!0&1] 5 {0}
|
||||||
|
[!0&!1] 6
|
||||||
|
--END--
|
||||||
|
""")
|
||||||
|
a2 = spot.to_weak_alternating(a2)
|
||||||
|
assert equivalent(a2, phi2)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue