3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-06-30 12:28:53 +00:00

Bug fixing with unit replacement

This commit is contained in:
CEisenhofer 2026-03-26 15:56:58 +01:00
parent 17ca44b351
commit 3b5b53126e
6 changed files with 33 additions and 20 deletions

View file

@ -37,7 +37,8 @@ namespace smt {
m_nielsen(m_sgraph, m_context_solver),
m_axioms(m_th_rewriter),
m_regex(m_sgraph),
m_model(m, m_seq, m_rewriter, m_sgraph)
m_model(m, m_seq, m_rewriter, m_sgraph),
m_relevant_lengths(m)
{
std::function<void(expr_ref_vector const&)> add_clause =
[&](expr_ref_vector const &clause) {
@ -112,7 +113,7 @@ namespace smt {
// -----------------------------------------------------------------------
bool theory_nseq::internalize_atom(app* atom, bool /*gate_ctx*/) {
std::cout << "internalize_atom: " << mk_pp(atom, m) << std::endl;
// std::cout << "internalize_atom: " << mk_pp(atom, m) << std::endl;
// str.in_re atoms are boolean predicates: register as bool_var
// so that assign_eh fires when the SAT solver assigns them.
// Following theory_seq: create a bool_var directly without an enode
@ -144,7 +145,7 @@ namespace smt {
}
bool theory_nseq::internalize_term(app* term) {
std::cout << "internalize_term: " << mk_pp(term, m) << std::endl;
// std::cout << "internalize_term: " << mk_pp(term, m) << std::endl;
// ensure ALL children are internalized (following theory_seq pattern)
for (auto arg : *term) {
mk_var(ensure_enode(arg));
@ -181,6 +182,11 @@ namespace smt {
m_ho_terms.push_back(term);
ensure_length_var(ho_s);
}
expr* v;
if (m_seq.str.is_length(term, v)) {
ctx.push_trail(restore_vector(m_relevant_lengths));
m_relevant_lengths.push_back(term);
}
return true;
}
@ -605,7 +611,7 @@ namespace smt {
auto lit = mk_literal(c.fml);
switch (ctx.get_assignment(lit)) {
case l_true: break;
case l_undef:
case l_undef:
has_undef = true;
ctx.force_phase(lit);
IF_VERBOSE(2, verbose_stream() <<