simulation: incorrect setting of non-deterministic property
Fixes #286. * spot/twaalgos/simulation.cc: Only set the deterministic property, not the non-deterministic one. * tests/core/ltl2tgba.test: Add test case. * NEWS: Mention the issue.
This commit is contained in:
parent
7987d71ae8
commit
7e394506b6
3 changed files with 15 additions and 3 deletions
3
NEWS
3
NEWS
|
|
@ -21,6 +21,9 @@ New in spot 2.4.0.dev (not yet released)
|
||||||
still correct outputs) depending on the BDD operations performed
|
still correct outputs) depending on the BDD operations performed
|
||||||
before.
|
before.
|
||||||
|
|
||||||
|
- spot::simulation() would occasionally incorrectly flag an
|
||||||
|
automaton as non-deterministic.
|
||||||
|
|
||||||
New in spot 2.4 (2017-09-06)
|
New in spot 2.4 (2017-09-06)
|
||||||
|
|
||||||
Build:
|
Build:
|
||||||
|
|
|
||||||
|
|
@ -582,7 +582,9 @@ namespace spot
|
||||||
res->set_init_state(gb->get_state(previous_class_
|
res->set_init_state(gb->get_state(previous_class_
|
||||||
[a_->get_init_state_number()].id()));
|
[a_->get_init_state_number()].id()));
|
||||||
|
|
||||||
res->merge_edges(); // FIXME: is this really needed?
|
res->merge_edges(); // This helps merging some edges with
|
||||||
|
// identical conditions, but different
|
||||||
|
// mark sets.
|
||||||
|
|
||||||
// Mark all accepting state in a second pass, when
|
// Mark all accepting state in a second pass, when
|
||||||
// dealing with SBA in cosimulation.
|
// dealing with SBA in cosimulation.
|
||||||
|
|
@ -616,8 +618,10 @@ namespace spot
|
||||||
true, // stutter inv.
|
true, // stutter inv.
|
||||||
});
|
});
|
||||||
// !unambiguous and !semi-deterministic are not preserved
|
// !unambiguous and !semi-deterministic are not preserved
|
||||||
if (!Cosimulation)
|
if (!Cosimulation && nb_minato == nb_satoneset)
|
||||||
res->prop_universal(nb_minato == nb_satoneset);
|
// Note that nb_minato != nb_satoneset does not imply
|
||||||
|
// non-deterministic, because of the merge_edges() above.
|
||||||
|
res->prop_universal(true);
|
||||||
if (Sba)
|
if (Sba)
|
||||||
res->prop_state_acc(true);
|
res->prop_state_acc(true);
|
||||||
return res;
|
return res;
|
||||||
|
|
|
||||||
|
|
@ -265,3 +265,8 @@ ltl2tgba -xsimul=1 --low "$f1" "$f2" > res2
|
||||||
diff res1 res2
|
diff res1 res2
|
||||||
|
|
||||||
test 3 = `ltl2tgba -f 'G(Fa & Fb) U a' --stats=%s`
|
test 3 = `ltl2tgba -f 'G(Fa & Fb) U a' --stats=%s`
|
||||||
|
|
||||||
|
# issue #286, the following automaton caused the print_hoa() function to
|
||||||
|
# report inconsistent "universal" property.
|
||||||
|
ltl2tgba --low 'X(((1) U (p1)) | (((p1) | (F(p0))) U ((0) R ((p2) M (p1)))))'>o
|
||||||
|
grep deterministic o
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue