3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-03-21 04:15:51 +00:00

Fix intblast ubv_to_int bug: add bv2int axioms for compound expressions

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2026-02-25 00:46:13 +00:00
parent 1b68ee5f30
commit 4860d57ae9
4 changed files with 44 additions and 4 deletions

View file

@ -117,13 +117,33 @@ namespace smt {
return true;
}
bool theory_intblast::add_bv2int_axioms() {
auto const& bv2int = m_translator.bv2int();
if (m_bv2int_qhead == bv2int.size())
return false;
ctx.push_trail(value_trail(m_bv2int_qhead));
for (; m_bv2int_qhead < bv2int.size(); ++m_bv2int_qhead) {
app* e = bv2int[m_bv2int_qhead];
expr_ref r(m_translator.translated(e), m);
if (r.get() == e)
continue;
ctx.get_rewriter()(r);
auto eq = mk_eq(e, r, false);
ctx.mark_as_relevant(eq);
ctx.mk_th_axiom(m_id, 1, &eq);
}
return true;
}
bool theory_intblast::can_propagate() {
return m_preds_qhead < m_translator.preds().size() || m_vars_qhead < m_translator.vars().size();
return m_preds_qhead < m_translator.preds().size() || m_vars_qhead < m_translator.vars().size() ||
m_bv2int_qhead < m_translator.bv2int().size();
}
void theory_intblast::propagate() {
add_bound_axioms();
add_predicate_axioms();
add_bv2int_axioms();
}
bool theory_intblast::internalize_atom(app * atom, bool gate_ctx) {