is_unambiguous: fix detection of empty languages
* src/tests/unambig.test: New test case. Reported by Ming-Hsien Tsai. * src/twaalgos/sccfilter.cc: Always create an initial state. * src/twaalgos/isunamb.cc: Speed up on empty languages. * NEWS, THANKS: Update.
This commit is contained in:
parent
61bf5daab4
commit
cd8e53de09
5 changed files with 29 additions and 5 deletions
|
|
@ -30,6 +30,8 @@ namespace spot
|
|||
if (aut->is_deterministic() || aut->is_unambiguous())
|
||||
return true;
|
||||
auto clean_a = scc_filter_states(aut);
|
||||
if (clean_a->num_edges() == 0)
|
||||
return true;
|
||||
auto prod = product(clean_a, clean_a);
|
||||
auto clean_p = scc_filter_states(prod);
|
||||
return clean_a->num_states() == clean_p->num_states()
|
||||
|
|
|
|||
|
|
@ -324,11 +324,12 @@ namespace spot
|
|||
}
|
||||
if (!given_si)
|
||||
delete si;
|
||||
// If the initial state has been filtered out, we don't attempt
|
||||
// to fix it.
|
||||
// If the initial state has been filtered out, we have to create
|
||||
// a new one (not doing so may cause empty automata, which in turn
|
||||
// cause all sort of issue with algorithms assuming an automaton
|
||||
// has one initial state).
|
||||
auto init = inout[aut->get_init_state_number()];
|
||||
if (init < out_n)
|
||||
filtered->set_init_state(init);
|
||||
filtered->set_init_state(init < out_n ? init : filtered->new_state());
|
||||
return filtered;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue