Trim DFAs used when translating PSL's closure operators.

This fixes a bug where {(a&!a)[=2]} was translated either into an
universal automaton (with simplification turned off) or in an
empty automaton (with simplification turned on).

* src/tgbaalgos/ltl2tgba_fm.cc (ratexp_to_dfa::translate): Trim
the automaton.
(ratexp_to_dfa::succ, ratexp_to_dfa::get_label): Deal with trimed
states.
(ltl_trad_visitor::visit(unop::Closure)): Likewise.
* src/tgbatest/ltl2tgba.test, src/ltltest/reduccmp.test: New test
cases.
This commit is contained in:
Alexandre Duret-Lutz 2011-11-06 16:15:31 +01:00
parent d1530de125
commit b3cc033e92
3 changed files with 88 additions and 8 deletions

View file

@ -196,6 +196,12 @@ for x in ../reduccmp ../reductaustr; do
# Because reduccmp will translate the formula,
# this also check for an old bug in ltl2tgba_fm.
run 0 $x '{(c&!c)[->0..1]}!' '0'
# Tricky case that used to break the translator,
# because it was translating closer on-the-fly
# without pruning the rational automaton.
run 0 $x '{(c&!c)[=2]}' '0'
;;
esac