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:
parent
d1530de125
commit
b3cc033e92
3 changed files with 88 additions and 8 deletions
|
|
@ -99,6 +99,10 @@ check_psl '{[*]; {read[=3]} && {write[=2]}} |=>
|
|||
check_psl '{[*]; start && comp_data_en; !comp_data_en && good_comp;
|
||||
{status_valid[->]} && {stop[=0]; true}} |-> {!data_out}' # 2.33
|
||||
|
||||
# Some tricky cases that require the rational automaton to be pruned
|
||||
# before it is used in the translation.
|
||||
check_psl '{{b[*];c} | {{a && !a}}[=2]}'
|
||||
check_psl '{((a&!b);((!a&!b)*))&&(!b*;(!a&b))}'
|
||||
|
||||
# Make sure 'a U (b U c)' has 3 states and 6 transitions,
|
||||
# before and after degeneralization.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue