mirror of
https://github.com/Z3Prover/z3
synced 2025-08-22 11:07:51 +00:00
move to get_sort as method, add opt_lns pass, disable xor simplification unless configured, fix perf bug in model converter update trail
This commit is contained in:
parent
c623e2db28
commit
4455f6caf8
36 changed files with 391 additions and 90 deletions
|
@ -198,7 +198,7 @@ namespace sat {
|
|||
s.m_mc.stackv().reset(); // TBD: brittle code
|
||||
s.add_ate(~u, v);
|
||||
if (find_binary_watch(wlist, ~v)) {
|
||||
IF_VERBOSE(10, verbose_stream() << "binary: " << ~u << "\n");
|
||||
IF_VERBOSE(20, verbose_stream() << "binary: " << ~u << "\n");
|
||||
s.assign_unit(~u);
|
||||
}
|
||||
// could turn non-learned non-binary tautology into learned binary.
|
||||
|
|
|
@ -60,6 +60,8 @@ namespace sat {
|
|||
m_phase = PS_SAT_CACHING;
|
||||
else if (s == symbol("random"))
|
||||
m_phase = PS_RANDOM;
|
||||
else if (s == symbol("frozen"))
|
||||
m_phase = PS_FROZEN;
|
||||
else
|
||||
throw sat_param_exception("invalid phase selection strategy: always_false, always_true, basic_caching, caching, random");
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ namespace sat {
|
|||
PS_ALWAYS_FALSE,
|
||||
PS_BASIC_CACHING,
|
||||
PS_SAT_CACHING,
|
||||
PS_FROZEN,
|
||||
PS_RANDOM
|
||||
};
|
||||
|
||||
|
|
|
@ -222,7 +222,6 @@ namespace sat {
|
|||
e.m_clause.append(c.size(), c.begin());
|
||||
}
|
||||
|
||||
|
||||
void model_converter::insert(entry & e, clause const & c) {
|
||||
SASSERT(c.contains(e.var()));
|
||||
SASSERT(m_entries.begin() <= &e);
|
||||
|
@ -345,7 +344,7 @@ namespace sat {
|
|||
void model_converter::flush(model_converter & src) {
|
||||
VERIFY(this != &src);
|
||||
m_entries.append(src.m_entries);
|
||||
m_exposed_lim = src.m_exposed_lim;
|
||||
m_exposed_lim += src.m_exposed_lim;
|
||||
src.m_entries.reset();
|
||||
src.m_exposed_lim = 0;
|
||||
}
|
||||
|
|
|
@ -1682,6 +1682,9 @@ namespace sat {
|
|||
case PS_BASIC_CACHING:
|
||||
phase = m_phase[next];
|
||||
break;
|
||||
case PS_FROZEN:
|
||||
phase = m_best_phase[next];
|
||||
break;
|
||||
case PS_SAT_CACHING:
|
||||
if (m_search_state == s_unsat) {
|
||||
phase = m_phase[next];
|
||||
|
@ -2071,6 +2074,7 @@ namespace sat {
|
|||
if (!was_eliminated(v)) {
|
||||
m_model[v] = value(v);
|
||||
m_phase[v] = value(v) == l_true;
|
||||
m_best_phase[v] = value(v) == l_true;
|
||||
}
|
||||
}
|
||||
TRACE("sat_mc_bug", m_mc.display(tout););
|
||||
|
@ -2847,6 +2851,8 @@ namespace sat {
|
|||
}
|
||||
|
||||
void solver::updt_phase_of_vars() {
|
||||
if (m_config.m_phase == PS_FROZEN)
|
||||
return;
|
||||
unsigned from_lvl = m_conflict_lvl;
|
||||
unsigned head = from_lvl == 0 ? 0 : m_scopes[from_lvl - 1].m_trail_lim;
|
||||
unsigned sz = m_trail.size();
|
||||
|
@ -2912,6 +2918,8 @@ namespace sat {
|
|||
case PS_ALWAYS_FALSE:
|
||||
for (auto& p : m_phase) p = false;
|
||||
break;
|
||||
case PS_FROZEN:
|
||||
break;
|
||||
case PS_BASIC_CACHING:
|
||||
switch (m_rephase_lim % 4) {
|
||||
case 0:
|
||||
|
|
|
@ -1437,6 +1437,10 @@ namespace sat {
|
|||
|
||||
|
||||
bool ba_solver::init_watch(constraint& c) {
|
||||
if (c.is_xr()) {
|
||||
std::cout << c.is_xr() << "\n";
|
||||
}
|
||||
|
||||
return !inconsistent() && c.init_watch(*this);
|
||||
}
|
||||
|
||||
|
@ -2064,8 +2068,10 @@ namespace sat {
|
|||
for (unsigned sz = m_constraints.size(), i = 0; i < sz; ++i) subsumption(*m_constraints[i]);
|
||||
for (unsigned sz = m_learned.size(), i = 0; i < sz; ++i) subsumption(*m_learned[i]);
|
||||
unit_strengthen();
|
||||
extract_xor();
|
||||
merge_xor();
|
||||
if (s().get_config().m_xor_solver) {
|
||||
extract_xor();
|
||||
merge_xor();
|
||||
}
|
||||
cleanup_clauses();
|
||||
cleanup_constraints();
|
||||
update_pure();
|
||||
|
@ -2073,6 +2079,8 @@ namespace sat {
|
|||
}
|
||||
while (count < 10 && (m_simplify_change || trail_sz < s().init_trail_size()));
|
||||
|
||||
gc();
|
||||
|
||||
// validate_eliminated();
|
||||
|
||||
IF_VERBOSE(1,
|
||||
|
|
|
@ -72,7 +72,7 @@ struct goal2sat::imp : public sat::sat_internalizer {
|
|||
expr_ref_vector m_trail;
|
||||
func_decl_ref_vector m_unhandled_funs;
|
||||
bool m_default_external;
|
||||
bool m_xor_solver;
|
||||
bool m_xor_solver { false };
|
||||
bool m_euf { false };
|
||||
bool m_drat { false };
|
||||
bool m_is_redundant { false };
|
||||
|
@ -1020,6 +1020,7 @@ void sat2goal::mc::flush_gmc() {
|
|||
expr_ref_vector tail(m);
|
||||
expr_ref def(m);
|
||||
auto is_literal = [&](expr* e) { expr* r; return is_uninterp_const(e) || (m.is_not(e, r) && is_uninterp_const(r)); };
|
||||
|
||||
for (unsigned i = 0; i < updates.size(); ++i) {
|
||||
sat::literal l = updates[i];
|
||||
if (l == sat::null_literal) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue