mirror of
https://github.com/Z3Prover/z3
synced 2025-06-06 14:13:23 +00:00
bug fixes
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
f6ee6894c7
commit
b72225d7d0
5 changed files with 23 additions and 19 deletions
|
@ -942,6 +942,7 @@ namespace sat {
|
||||||
}
|
}
|
||||||
literal next() { SASSERT(!empty()); return to_literal(m_queue.erase_min()); }
|
literal next() { SASSERT(!empty()); return to_literal(m_queue.erase_min()); }
|
||||||
bool empty() const { return m_queue.empty(); }
|
bool empty() const { return m_queue.empty(); }
|
||||||
|
void reset() { m_queue.reset(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
simplifier & s;
|
simplifier & s;
|
||||||
|
@ -1042,7 +1043,7 @@ namespace sat {
|
||||||
m_to_remove.reset();
|
m_to_remove.reset();
|
||||||
clause_use_list & occs = s.m_use_list.get(l);
|
clause_use_list & occs = s.m_use_list.get(l);
|
||||||
clause_use_list::iterator it = occs.mk_iterator();
|
clause_use_list::iterator it = occs.mk_iterator();
|
||||||
while (!it.at_end()) {
|
for (; !it.at_end(); it.next()) {
|
||||||
clause & c = it.curr();
|
clause & c = it.curr();
|
||||||
if (c.is_blocked()) continue;
|
if (c.is_blocked()) continue;
|
||||||
m_counter -= c.size();
|
m_counter -= c.size();
|
||||||
|
@ -1053,7 +1054,6 @@ namespace sat {
|
||||||
s.m_num_blocked_clauses++;
|
s.m_num_blocked_clauses++;
|
||||||
}
|
}
|
||||||
s.unmark_all(c);
|
s.unmark_all(c);
|
||||||
it.next();
|
|
||||||
}
|
}
|
||||||
for (clause* c : m_to_remove)
|
for (clause* c : m_to_remove)
|
||||||
s.block_clause(*c);
|
s.block_clause(*c);
|
||||||
|
@ -1083,7 +1083,7 @@ namespace sat {
|
||||||
}
|
}
|
||||||
clause_use_list & neg_occs = s.m_use_list.get(~l);
|
clause_use_list & neg_occs = s.m_use_list.get(~l);
|
||||||
clause_use_list::iterator it = neg_occs.mk_iterator();
|
clause_use_list::iterator it = neg_occs.mk_iterator();
|
||||||
while (!it.at_end()) {
|
for (; !it.at_end(); it.next()) {
|
||||||
bool tautology = false;
|
bool tautology = false;
|
||||||
clause & c = it.curr();
|
clause & c = it.curr();
|
||||||
if (c.is_blocked()) continue;
|
if (c.is_blocked()) continue;
|
||||||
|
@ -1110,7 +1110,6 @@ namespace sat {
|
||||||
if (j == 0) return false;
|
if (j == 0) return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
it.next();
|
|
||||||
}
|
}
|
||||||
return first;
|
return first;
|
||||||
}
|
}
|
||||||
|
@ -1204,12 +1203,12 @@ namespace sat {
|
||||||
}
|
}
|
||||||
|
|
||||||
void cce() {
|
void cce() {
|
||||||
|
insert_queue();
|
||||||
cce_clauses();
|
cce_clauses();
|
||||||
cce_binary();
|
cce_binary();
|
||||||
}
|
}
|
||||||
|
|
||||||
void cce_binary() {
|
void cce_binary() {
|
||||||
insert_queue();
|
|
||||||
while (!m_queue.empty() && m_counter >= 0) {
|
while (!m_queue.empty() && m_counter >= 0) {
|
||||||
s.checkpoint();
|
s.checkpoint();
|
||||||
process_cce_binary(m_queue.next());
|
process_cce_binary(m_queue.next());
|
||||||
|
@ -1309,6 +1308,7 @@ namespace sat {
|
||||||
}
|
}
|
||||||
|
|
||||||
void bca() {
|
void bca() {
|
||||||
|
m_queue.reset();
|
||||||
insert_queue();
|
insert_queue();
|
||||||
while (!m_queue.empty() && m_counter >= 0) {
|
while (!m_queue.empty() && m_counter >= 0) {
|
||||||
s.checkpoint();
|
s.checkpoint();
|
||||||
|
@ -1360,7 +1360,7 @@ namespace sat {
|
||||||
|
|
||||||
clause_use_list & neg_occs = s.m_use_list.get(~l);
|
clause_use_list & neg_occs = s.m_use_list.get(~l);
|
||||||
clause_use_list::iterator it = neg_occs.mk_iterator();
|
clause_use_list::iterator it = neg_occs.mk_iterator();
|
||||||
while (!it.at_end()) {
|
for (; !it.at_end(); it.next()) {
|
||||||
clause & c = it.curr();
|
clause & c = it.curr();
|
||||||
if (c.is_blocked()) continue;
|
if (c.is_blocked()) continue;
|
||||||
m_counter -= c.size();
|
m_counter -= c.size();
|
||||||
|
@ -1372,7 +1372,6 @@ namespace sat {
|
||||||
}
|
}
|
||||||
if (i == sz)
|
if (i == sz)
|
||||||
return false;
|
return false;
|
||||||
it.next();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s.s.m_ext) {
|
if (s.s.m_ext) {
|
||||||
|
|
|
@ -69,10 +69,11 @@ class inc_sat_solver : public solver {
|
||||||
bool m_internalized; // are formulas internalized?
|
bool m_internalized; // are formulas internalized?
|
||||||
bool m_internalized_converted; // have internalized formulas been converted back
|
bool m_internalized_converted; // have internalized formulas been converted back
|
||||||
expr_ref_vector m_internalized_fmls; // formulas in internalized format
|
expr_ref_vector m_internalized_fmls; // formulas in internalized format
|
||||||
|
bool m_incremental_mode;
|
||||||
|
|
||||||
typedef obj_map<expr, sat::literal> dep2asm_t;
|
typedef obj_map<expr, sat::literal> dep2asm_t;
|
||||||
public:
|
public:
|
||||||
inc_sat_solver(ast_manager& m, params_ref const& p):
|
inc_sat_solver(ast_manager& m, params_ref const& p, bool incremental_mode):
|
||||||
m(m),
|
m(m),
|
||||||
m_solver(p, m.limit()),
|
m_solver(p, m.limit()),
|
||||||
m_params(p),
|
m_params(p),
|
||||||
|
@ -86,7 +87,8 @@ public:
|
||||||
m_unknown("no reason given"),
|
m_unknown("no reason given"),
|
||||||
m_internalized(false),
|
m_internalized(false),
|
||||||
m_internalized_converted(false),
|
m_internalized_converted(false),
|
||||||
m_internalized_fmls(m) {
|
m_internalized_fmls(m),
|
||||||
|
m_incremental_mode(incremental_mode) {
|
||||||
updt_params(p);
|
updt_params(p);
|
||||||
init_preprocess();
|
init_preprocess();
|
||||||
}
|
}
|
||||||
|
@ -99,7 +101,7 @@ public:
|
||||||
}
|
}
|
||||||
ast_translation tr(m, dst_m);
|
ast_translation tr(m, dst_m);
|
||||||
m_solver.pop_to_base_level();
|
m_solver.pop_to_base_level();
|
||||||
inc_sat_solver* result = alloc(inc_sat_solver, dst_m, p);
|
inc_sat_solver* result = alloc(inc_sat_solver, dst_m, p, m_incremental_mode);
|
||||||
result->m_solver.copy(m_solver);
|
result->m_solver.copy(m_solver);
|
||||||
result->m_fmls_head = m_fmls_head;
|
result->m_fmls_head = m_fmls_head;
|
||||||
for (expr* f : m_fmls) result->m_fmls.push_back(tr(f));
|
for (expr* f : m_fmls) result->m_fmls.push_back(tr(f));
|
||||||
|
@ -271,7 +273,10 @@ public:
|
||||||
virtual void updt_params(params_ref const & p) {
|
virtual void updt_params(params_ref const & p) {
|
||||||
m_params.append(p);
|
m_params.append(p);
|
||||||
sat_params p1(p);
|
sat_params p1(p);
|
||||||
|
if (m_incremental_mode) {
|
||||||
m_params.set_bool("elim_vars", false);
|
m_params.set_bool("elim_vars", false);
|
||||||
|
m_params.set_uint("elim_blocked_clauses_at", UINT_MAX);
|
||||||
|
}
|
||||||
m_params.set_bool("keep_cardinality_constraints", p1.cardinality_solver());
|
m_params.set_bool("keep_cardinality_constraints", p1.cardinality_solver());
|
||||||
m_params.set_bool("keep_pb_constraints", m_solver.get_config().m_pb_solver == sat::PB_SOLVER);
|
m_params.set_bool("keep_pb_constraints", m_solver.get_config().m_pb_solver == sat::PB_SOLVER);
|
||||||
m_params.set_bool("pb_num_system", m_solver.get_config().m_pb_solver == sat::PB_SORTING);
|
m_params.set_bool("pb_num_system", m_solver.get_config().m_pb_solver == sat::PB_SORTING);
|
||||||
|
@ -848,8 +853,8 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
solver* mk_inc_sat_solver(ast_manager& m, params_ref const& p) {
|
solver* mk_inc_sat_solver(ast_manager& m, params_ref const& p, bool incremental_mode) {
|
||||||
return alloc(inc_sat_solver, m, p);
|
return alloc(inc_sat_solver, m, p, incremental_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ Notes:
|
||||||
|
|
||||||
#include "solver/solver.h"
|
#include "solver/solver.h"
|
||||||
|
|
||||||
solver* mk_inc_sat_solver(ast_manager& m, params_ref const& p);
|
solver* mk_inc_sat_solver(ast_manager& m, params_ref const& p, bool incremental_mode = true);
|
||||||
|
|
||||||
|
|
||||||
void inc_sat_display(std::ostream& out, solver& s, unsigned sz, expr*const* soft, rational const* _weights);
|
void inc_sat_display(std::ostream& out, solver& s, unsigned sz, expr*const* soft, rational const* _weights);
|
||||||
|
|
|
@ -25,8 +25,8 @@ Notes:
|
||||||
#include "tactic/portfolio/bounded_int2bv_solver.h"
|
#include "tactic/portfolio/bounded_int2bv_solver.h"
|
||||||
#include "solver/solver2tactic.h"
|
#include "solver/solver2tactic.h"
|
||||||
|
|
||||||
solver * mk_fd_solver(ast_manager & m, params_ref const & p) {
|
solver * mk_fd_solver(ast_manager & m, params_ref const & p, bool incremental_mode) {
|
||||||
solver* s = mk_inc_sat_solver(m, p);
|
solver* s = mk_inc_sat_solver(m, p, incremental_mode);
|
||||||
s = mk_enum2bv_solver(m, p, s);
|
s = mk_enum2bv_solver(m, p, s);
|
||||||
s = mk_pb2bv_solver(m, p, s);
|
s = mk_pb2bv_solver(m, p, s);
|
||||||
s = mk_bounded_int2bv_solver(m, p, s);
|
s = mk_bounded_int2bv_solver(m, p, s);
|
||||||
|
@ -34,5 +34,5 @@ solver * mk_fd_solver(ast_manager & m, params_ref const & p) {
|
||||||
}
|
}
|
||||||
|
|
||||||
tactic * mk_fd_tactic(ast_manager & m, params_ref const& p) {
|
tactic * mk_fd_tactic(ast_manager & m, params_ref const& p) {
|
||||||
return mk_solver2tactic(mk_fd_solver(m, p));
|
return mk_solver2tactic(mk_fd_solver(m, p, false));
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ Notes:
|
||||||
class solver;
|
class solver;
|
||||||
class tactic;
|
class tactic;
|
||||||
|
|
||||||
solver * mk_fd_solver(ast_manager & m, params_ref const & p);
|
solver * mk_fd_solver(ast_manager & m, params_ref const & p, bool incremental_mode = true);
|
||||||
tactic * mk_fd_tactic(ast_manager & m, params_ref const & p);
|
tactic * mk_fd_tactic(ast_manager & m, params_ref const & p);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue