mirror of
https://github.com/Z3Prover/z3
synced 2025-06-03 21:01:22 +00:00
fix bugs in sequence extraction from NFA
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
14c19fe928
commit
88362a1c3a
1 changed files with 14 additions and 2 deletions
|
@ -731,8 +731,14 @@ bool seq_rewriter::is_sequence(eautomaton& aut, expr_ref_vector& seq) {
|
||||||
unsigned state = aut.init();
|
unsigned state = aut.init();
|
||||||
uint_set visited;
|
uint_set visited;
|
||||||
eautomaton::moves mvs;
|
eautomaton::moves mvs;
|
||||||
aut.get_moves_from(state, mvs, true);
|
unsigned_vector states;
|
||||||
while (!aut.is_final_state(state)) {
|
aut.get_epsilon_closure(state, states);
|
||||||
|
bool has_final = false;
|
||||||
|
for (unsigned i = 0; !has_final && i < states.size(); ++i) {
|
||||||
|
has_final = aut.is_final_state(states[i]);
|
||||||
|
}
|
||||||
|
aut.get_moves_from(state, mvs, true);
|
||||||
|
while (!has_final) {
|
||||||
if (mvs.size() != 1) {
|
if (mvs.size() != 1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -751,6 +757,12 @@ bool seq_rewriter::is_sequence(eautomaton& aut, expr_ref_vector& seq) {
|
||||||
state = mvs[0].dst();
|
state = mvs[0].dst();
|
||||||
mvs.reset();
|
mvs.reset();
|
||||||
aut.get_moves_from(state, mvs, true);
|
aut.get_moves_from(state, mvs, true);
|
||||||
|
states.reset();
|
||||||
|
has_final = false;
|
||||||
|
aut.get_epsilon_closure(state, states);
|
||||||
|
for (unsigned i = 0; !has_final && i < states.size(); ++i) {
|
||||||
|
has_final = aut.is_final_state(states[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return mvs.empty();
|
return mvs.empty();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue