3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-05-06 23:35:46 +00:00

removing unit clauses and dependency manager, use minisat approach by tracking assumption literals directly also in clauses

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2021-09-20 15:10:03 -07:00
parent bb5ff8db24
commit 8ee54c665a
12 changed files with 60 additions and 179 deletions

View file

@ -23,26 +23,20 @@ namespace polysat {
static_assert(std::is_move_constructible_v<clause_builder>);
clause_builder::clause_builder(solver& s):
m_solver(&s), m_dep(nullptr, s.m_dm)
m_solver(&s)
{}
void clause_builder::reset() {
m_literals.reset();
m_level = 0;
m_dep = nullptr;
SASSERT(empty());
}
clause_ref clause_builder::build() {
clause_ref cl = clause::from_literals(m_level, std::move(m_dep), std::move(m_literals));
m_level = 0;
clause_ref cl = clause::from_literals(std::move(m_literals));
SASSERT(empty());
return cl;
}
void clause_builder::add_dependency(p_dependency* d) {
m_dep = m_solver->m_dm.mk_join(m_dep, d);
}
void clause_builder::push(sat::literal lit) {
push(m_solver->m_constraints.lookup(lit));
@ -53,8 +47,6 @@ namespace polysat {
SASSERT(c->has_bvar());
SASSERT(!c.is_always_true()); // clause would be a tautology
if (c->unit_clause()) {
add_dependency(c->unit_dep());
m_level = std::max(m_level, c->unit_clause()->level());
return;
}
m_literals.push_back(c.blit());