3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-23 06:13:40 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2021-05-15 17:00:49 -07:00
parent 88bbe9d54e
commit eaca24ac01
2 changed files with 11 additions and 11 deletions

View file

@ -94,15 +94,14 @@ namespace polysat {
*/ */
void linear_solver::new_eq(eq_constraint& c) { void linear_solver::new_eq(eq_constraint& c) {
pdd p = c.p();
var_t v = internalize_pdd(c.p()); var_t v = internalize_pdd(c.p());
m_bool_var2row.setx(c.bvar(), v, UINT_MAX); auto pr = std::make_pair(v, v);
m_bool_var2row.setx(c.bvar(), pr, pr);
} }
void linear_solver::assert_eq(eq_constraint& c) { void linear_solver::assert_eq(eq_constraint& c) {
var_t v = m_bool_var2row[c.bvar()]; var_t v = m_bool_var2row[c.bvar()].first;
pdd p = c.p(); unsigned sz = c.p().power_of_2();
unsigned sz = p.power_of_2();
auto& fp = sz2fixplex(sz); auto& fp = sz2fixplex(sz);
m_trail.push_back(trail_i::set_bound_i); m_trail.push_back(trail_i::set_bound_i);
m_rows.push_back(std::make_pair(v, sz)); m_rows.push_back(std::make_pair(v, sz));
@ -114,13 +113,13 @@ namespace polysat {
void linear_solver::new_le(ule_constraint& c) { void linear_solver::new_le(ule_constraint& c) {
var_t v = internalize_pdd(c.lhs()); var_t v = internalize_pdd(c.lhs());
m_bool_var2row.setx(c.bvar(), v, UINT_MAX);
var_t w = internalize_pdd(c.rhs()); var_t w = internalize_pdd(c.rhs());
m_bool_var2row.setx(c.bvar(), w, UINT_MAX); auto pr = std::make_pair(v, w);
// todo: track both variables m_bool_var2row.setx(c.bvar(), pr, pr);
} }
void linear_solver::assert_le(ule_constraint& c) { void linear_solver::assert_le(ule_constraint& c) {
auto [v, w] = m_bool_var2row[c.bvar()];
// v <= w: // v <= w:
// static constraints: // static constraints:
// - lo(v) <= lo(w) // - lo(v) <= lo(w)
@ -192,8 +191,9 @@ namespace polysat {
} }
var_t linear_solver::pvar2var(unsigned sz, pvar v) { var_t linear_solver::pvar2var(unsigned sz, pvar v) {
NOT_IMPLEMENTED_YET(); unsigned_vector vars;
return 0; vars.push_back(v);
return mono2var(sz, vars);
} }
var_t linear_solver::fresh_var(unsigned sz) { var_t linear_solver::fresh_var(unsigned sz) {

View file

@ -51,7 +51,7 @@ namespace polysat {
svector<var_t> m_vars; svector<var_t> m_vars;
vector<rational> m_coeffs; vector<rational> m_coeffs;
svector<var_t> m_bool_var2row; svector<std::pair<var_t, var_t>> m_bool_var2row;
unsigned_vector m_sz2num_vars; unsigned_vector m_sz2num_vars;
fixplex_base& sz2fixplex(unsigned sz); fixplex_base& sz2fixplex(unsigned sz);