3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-03 12:51:22 +00:00

add parameter to force sat-cleaning on initialization and on simplification phases

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2018-10-11 22:05:04 -07:00
parent f14a2b9a7c
commit f5fea8ae30
5 changed files with 11 additions and 6 deletions

View file

@ -152,6 +152,8 @@ namespace sat {
m_gc_burst = p.gc_burst(); m_gc_burst = p.gc_burst();
m_gc_defrag = p.gc_defrag(); m_gc_defrag = p.gc_defrag();
m_force_cleanup = p.force_cleanup();
m_minimize_lemmas = p.minimize_lemmas(); m_minimize_lemmas = p.minimize_lemmas();
m_core_minimize = p.core_minimize(); m_core_minimize = p.core_minimize();
m_core_minimize_partial = p.core_minimize_partial(); m_core_minimize_partial = p.core_minimize_partial();

View file

@ -136,6 +136,8 @@ namespace sat {
bool m_gc_burst; bool m_gc_burst;
bool m_gc_defrag; bool m_gc_defrag;
bool m_force_cleanup;
bool m_minimize_lemmas; bool m_minimize_lemmas;
bool m_dyn_sub_res; bool m_dyn_sub_res;

View file

@ -31,6 +31,7 @@ def_module_params('sat',
('gc.burst', BOOL, False, 'perform eager garbage collection during initialization'), ('gc.burst', BOOL, False, 'perform eager garbage collection during initialization'),
('gc.defrag', BOOL, True, 'defragment clauses when garbage collecting'), ('gc.defrag', BOOL, True, 'defragment clauses when garbage collecting'),
('simplify.delay', UINT, 0, 'set initial delay of simplification by a conflict count'), ('simplify.delay', UINT, 0, 'set initial delay of simplification by a conflict count'),
('force_cleanup', BOOL, False, 'force cleanup to remove tautologies and simplify clauses'),
('minimize_lemmas', BOOL, True, 'minimize learned clauses'), ('minimize_lemmas', BOOL, True, 'minimize learned clauses'),
('dyn_sub_res', BOOL, True, 'dynamic subsumption resolution for minimizing learned clauses'), ('dyn_sub_res', BOOL, True, 'dynamic subsumption resolution for minimizing learned clauses'),
('core.minimize', BOOL, False, 'minimize computed core'), ('core.minimize', BOOL, False, 'minimize computed core'),

View file

@ -1086,7 +1086,7 @@ namespace sat {
init_assumptions(num_lits, lits); init_assumptions(num_lits, lits);
propagate(false); propagate(false);
if (check_inconsistent()) return l_false; if (check_inconsistent()) return l_false;
cleanup(); cleanup(m_config.m_force_cleanup);
if (m_config.m_unit_walk) { if (m_config.m_unit_walk) {
return do_unit_walk(); return do_unit_walk();
@ -1458,7 +1458,7 @@ namespace sat {
if (should_restart()) if (should_restart())
return l_undef; return l_undef;
if (at_base_lvl()) { if (at_base_lvl()) {
cleanup(); // cleaner may propagate frozen clauses cleanup(false); // cleaner may propagate frozen clauses
if (inconsistent()) { if (inconsistent()) {
TRACE("sat", tout << "conflict at level 0\n";); TRACE("sat", tout << "conflict at level 0\n";);
return l_false; return l_false;
@ -1654,7 +1654,7 @@ namespace sat {
SASSERT(at_base_lvl()); SASSERT(at_base_lvl());
m_cleaner(); m_cleaner(m_config.m_force_cleanup);
CASSERT("sat_simplify_bug", check_invariant()); CASSERT("sat_simplify_bug", check_invariant());
m_scc(); m_scc();
@ -3695,10 +3695,10 @@ namespace sat {
// Simplification // Simplification
// //
// ----------------------- // -----------------------
void solver::cleanup() { void solver::cleanup(bool force) {
if (!at_base_lvl() || inconsistent()) if (!at_base_lvl() || inconsistent())
return; return;
if (m_cleaner() && m_ext) if (m_cleaner(force) && m_ext)
m_ext->clauses_modifed(); m_ext->clauses_modifed();
} }

View file

@ -549,7 +549,7 @@ namespace sat {
// //
// ----------------------- // -----------------------
public: public:
void cleanup(); void cleanup(bool force);
void simplify(bool learned = true); void simplify(bool learned = true);
void asymmetric_branching(); void asymmetric_branching();
unsigned scc_bin(); unsigned scc_bin();