diff --git a/src/ast/sls/sls_arith_base.cpp b/src/ast/sls/sls_arith_base.cpp index 60d65c5a6..259bb49d9 100644 --- a/src/ast/sls/sls_arith_base.cpp +++ b/src/ast/sls/sls_arith_base.cpp @@ -1416,6 +1416,7 @@ namespace sls { buffer todo; todo.push_back(v); auto& vi = m_vars[v]; + m_tmp_set.reset(); for (unsigned i = 0; i < todo.size(); ++i) { var_t u = todo[i]; auto& ui = m_vars[u]; @@ -1434,8 +1435,10 @@ namespace sls { todo.push_back(x); } for (auto const& [coeff, bv] : ui.m_linear_occurs) - vi.m_bool_vars_of.insert(bv); + m_tmp_set.insert(bv); } + for (auto bv : m_tmp_set) + vi.m_bool_vars_of.push_back(bv); } template diff --git a/src/ast/sls/sls_arith_base.h b/src/ast/sls/sls_arith_base.h index 2c7cf0c7f..bb0a013bc 100644 --- a/src/ast/sls/sls_arith_base.h +++ b/src/ast/sls/sls_arith_base.h @@ -119,7 +119,7 @@ namespace sls { arith_op_kind m_op = arith_op_kind::LAST_ARITH_OP; unsigned m_def_idx = UINT_MAX; vector> m_linear_occurs; - indexed_uint_set m_bool_vars_of; + sat::bool_var_vector m_bool_vars_of; unsigned_vector m_muls; unsigned_vector m_adds; optional m_lo, m_hi; @@ -215,6 +215,7 @@ namespace sls { arith_clausal m_clausal_sls; svector m_prob_break; indexed_uint_set m_bool_var_atoms; + indexed_uint_set m_tmp_set; void invariant(); void invariant(ineq const& i);