3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-10-09 09:21:56 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2020-04-24 11:58:48 -07:00
parent 6ab83466d9
commit 785c9a18ca
5 changed files with 20 additions and 1 deletions

View file

@ -1199,6 +1199,17 @@ bool theory_seq::reduce_length(unsigned i, unsigned j, bool front, expr_ref_vect
}
}
/**
Skolem predicates for automata acceptance are stateful.
They depend on the shape of automata that were used when the predicates
were created. It is unsafe to copy assertions about automata from one context
to another.
*/
bool theory_seq::is_safe_to_copy(bool_var v) const {
context & ctx = get_context();
expr* e = ctx.bool_var2expr(v);
return !m_sk.is_skolem(e);
}
bool theory_seq::get_length(expr* e, expr_ref& len, literal_vector& lits) {
context& ctx = get_context();
@ -3352,6 +3363,7 @@ void theory_seq::propagate_accept(literal lit, expr* acc) {
VERIFY(m_autil.is_numeral(idx, _idx));
VERIFY(aut);
if (aut->is_sink_state(src)) {
TRACE("seq", { display_expr d(m); aut->display(tout << "sink " << src << "\n", d); });
propagate_lit(nullptr, 1, &lit, false_literal);
return;
}