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:
Alexandre Duret-Lutz 2017-09-28 20:38:13 +02:00
parent 7987d71ae8
commit 7e394506b6
3 changed files with 15 additions and 3 deletions

3
NEWS
View file

@ -21,6 +21,9 @@ New in spot 2.4.0.dev (not yet released)
still correct outputs) depending on the BDD operations performed
before.
- spot::simulation() would occasionally incorrectly flag an
automaton as non-deterministic.
New in spot 2.4 (2017-09-06)
Build:

View file

@ -582,7 +582,9 @@ namespace spot
res->set_init_state(gb->get_state(previous_class_
[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
// dealing with SBA in cosimulation.
@ -616,8 +618,10 @@ namespace spot
true, // stutter inv.
});
// !unambiguous and !semi-deterministic are not preserved
if (!Cosimulation)
res->prop_universal(nb_minato == nb_satoneset);
if (!Cosimulation && 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)
res->prop_state_acc(true);
return res;

View file

@ -265,3 +265,8 @@ ltl2tgba -xsimul=1 --low "$f1" "$f2" > res2
diff res1 res2
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