Skip to content

Commit

Permalink
build fix
Browse files Browse the repository at this point in the history
  • Loading branch information
NikolajBjorner committed Sep 2, 2020
1 parent daf7e9e commit 7c2fe46
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 49 deletions.
44 changes: 18 additions & 26 deletions src/sat/sat_drat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,11 @@ namespace sat {
else if (st.is_asserted())
out << "a";

switch (st.orig) {
case status::orig::ba: return out << " ba";
case status::orig::euf: return out << " euf";
default: return out;
}
if (st.is_ba())
out << " ba";
else if (st.is_euf())
out << " euf";
return out;
}

void drat::dump(unsigned n, literal const* c, status st) {
Expand All @@ -94,32 +94,25 @@ namespace sat {
char* lastd = digits + sizeof(digits);

unsigned len = 0;
switch (st.st) {
case status::st::asserted:
if (st.is_asserted()) {
buffer[len++] = 'a';
buffer[len++] = ' ';
break;
case status::st::deleted:
}
else if (st.is_deleted()) {
buffer[len++] = 'd';
buffer[len++] = ' ';
break;
default:
break;
}
switch (st.orig) {
case status::orig::euf:

if (st.is_euf()) {
buffer[len++] = 'e';
buffer[len++] = 'u';
buffer[len++] = 'f';
buffer[len++] = ' ';
break;
case status::orig::ba:
}
else if (st.is_ba()) {
buffer[len++] = 'b';
buffer[len++] = 'a';
buffer[len++] = ' ';
break;
default:
break;
}
for (unsigned i = 0; i < n; ++i) {
literal lit = c[i];
Expand Down Expand Up @@ -160,12 +153,11 @@ namespace sat {

void drat::bdump(unsigned n, literal const* c, status st) {
unsigned char ch = 0;
switch (st.st) {
case status::st::asserted: return;
case status::st::redundant: ch = 'a'; break;
case status::st::deleted: ch = 'd'; break;
default: UNREACHABLE(); break;
}
if (st.is_redundant())
ch = 'a';
else if (st.is_deleted())
ch = 'd';
else return;
char buffer[10000];
int len = 0;
buffer[len++] = ch;
Expand Down Expand Up @@ -497,7 +489,7 @@ namespace sat {
clause& c = *m_proof[i];
unsigned j = 0;
for (; j < c.size() && c[j] != ~l; ++j) {}
if (st.orig == status::orig::sat && j != c.size()) {
if (st.is_sat() && j != c.size()) {
lits.append(j, c.begin());
lits.append(c.size() - j - 1, c.begin() + j + 1);
if (!is_drup(lits.size(), lits.c_ptr()))
Expand Down
2 changes: 1 addition & 1 deletion src/sat/sat_solver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -501,7 +501,7 @@ namespace sat {
clause * solver::mk_nary_clause(unsigned num_lits, literal * lits, sat::status st) {
m_stats.m_mk_clause++;
clause * r = alloc_clause(num_lits, lits, st.is_redundant());
SASSERT(!st.is_learned() || r->is_learned());
SASSERT(!st.is_redundant() || r->is_learned());
bool reinit = attach_nary_clause(*r);
if (reinit && !st.is_redundant()) push_reinit_stack(*r);
if (st.is_redundant()) {
Expand Down
27 changes: 16 additions & 11 deletions src/sat/sat_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -254,26 +254,31 @@ namespace sat {

class status {
public:
enum class st { asserted, redundant, deleted } st;
enum class orig { sat, ba, euf } orig;
status(enum st s, enum orig o) : st(s), orig(o) {};
status(status const& s) : st(s.st), orig(s.orig) {}
status(status&& s) noexcept { st = st::asserted; orig = orig::sat; std::swap(st, s.st); std::swap(orig, s.orig); }
enum class st { asserted, redundant, deleted };
enum class orig { sat, ba, euf };
st m_st;
orig m_orig;
public:
status(enum st s, enum orig o) : m_st(s), m_orig(o) {};
status(status const& s) : m_st(s.m_st), m_orig(s.m_orig) {}
status(status&& s) noexcept { m_st = st::asserted; m_orig = orig::sat; std::swap(m_st, s.m_st); std::swap(m_orig, s.m_orig); }
static status redundant() { return status(status::st::redundant, status::orig::sat); }
static status asserted() { return status(status::st::asserted, status::orig::sat); }
static status deleted() { return status(status::st::deleted, status::orig::sat); }

static status euf_learned() { return status(status::st::redundant, status::orig::euf); }
static status euf_asserted() { return status(status::st::asserted, status::orig::euf); }
static status euf(bool redundant) { return status(redundant ? st::redundant : st::asserted, orig::euf); }

static status ba(bool redundant) { return redundant ? ba_redundant() : ba_asserted(); }
static status ba_redundant() { return status(status::st::redundant, status::orig::ba); }
static status ba_asserted() { return status(status::st::asserted, status::orig::ba); }

bool is_redundant() const { return st::redundant == st; }
bool is_asserted() const { return st::asserted == st; }
bool is_deleted() const { return st::deleted == st; }
bool operator==(status const& s) const { return s.orig == orig && s.st == st; }
bool is_redundant() const { return st::redundant == m_st; }
bool is_asserted() const { return st::asserted == m_st; }
bool is_deleted() const { return st::deleted == m_st; }

bool is_sat() const { return orig::sat == m_orig; }
bool is_ba() const { return orig::ba == m_orig; }
bool is_euf() const { return orig::euf == m_orig; }
};


Expand Down
6 changes: 3 additions & 3 deletions src/sat/smt/ba_solver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1598,7 +1598,7 @@ namespace sat {
TRACE("ba", tout << m_lemma << "\n";);

if (get_config().m_drat && m_solver) {
s().m_drat.add(m_lemma, sat::status::ba_redundant());
s().m_drat.add(m_lemma, sat::status::ba(true));
}

s().m_lemma.reset();
Expand Down Expand Up @@ -2140,7 +2140,7 @@ namespace sat {
for (literal lit : r)
lits.push_back(~lit);
lits.push_back(l);
s().m_drat.add(lits, sat::status::ba_redundant());
s().m_drat.add(lits, sat::status::ba(true));
}
}

Expand Down Expand Up @@ -2923,7 +2923,7 @@ namespace sat {
}
if (all_units && sz < k) {
if (c.lit() == null_literal) {
s().mk_clause(0, nullptr, status::ba_redundant());
s().mk_clause(0, nullptr, status::ba(c.learned()));
}
else {
literal lit = ~c.lit();
Expand Down
4 changes: 2 additions & 2 deletions src/sat/smt/euf_ackerman.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ namespace euf {
}
expr_ref eq(m.mk_eq(a, b), m);
lits.push_back(s.internalize(eq, false, false, true));
s.s().mk_clause(lits, sat::status::euf_learned());
s.s().mk_clause(lits, sat::status::euf(true));
}

void ackerman::add_eq(expr* a, expr* b, expr* c) {
Expand All @@ -205,6 +205,6 @@ namespace euf {
lits[0] = s.internalize(eq1, true, false, true);
lits[1] = s.internalize(eq2, true, false, true);
lits[2] = s.internalize(eq3, false, false, true);
s.s().mk_clause(3, lits, sat::status::euf_learned());
s.s().mk_clause(3, lits, sat::status::euf(true));
}
}
10 changes: 5 additions & 5 deletions src/sat/smt/euf_internalize.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,8 @@ namespace euf {
if (lit.sign()) {
sat::bool_var v = si.add_bool_var(n->get_owner());
sat::literal lit2 = literal(v, false);
s().mk_clause(~lit, lit2, sat::status::euf_asserted());
s().mk_clause(lit, ~lit2, sat::status::euf_asserted());
s().mk_clause(~lit, lit2, sat::status::euf(false));
s().mk_clause(lit, ~lit2, sat::status::euf(false));
lit = lit2;
}
sat::bool_var v = lit.var();
Expand Down Expand Up @@ -132,7 +132,7 @@ namespace euf {
if (sz <= 1)
return;

sat::status st = m_is_redundant ? sat::status::euf_learned() : sat::status::euf_asserted();
sat::status st = sat::status::euf(m_is_redundant);
static const unsigned distinct_max_args = 32;
if (sz <= distinct_max_args) {
sat::literal_vector lits;
Expand Down Expand Up @@ -175,7 +175,7 @@ namespace euf {
SASSERT(m.is_distinct(e));
static const unsigned distinct_max_args = 32;
unsigned sz = e->get_num_args();
sat::status st = m_is_redundant ? sat::status::euf_learned() : sat::status::euf_asserted();
sat::status st = sat::status::euf(m_is_redundant);
if (sz <= 1) {
s().mk_clause(0, nullptr, st);
return;
Expand Down Expand Up @@ -209,7 +209,7 @@ namespace euf {

void solver::axiomatize_basic(enode* n) {
expr* e = n->get_owner();
sat::status st = m_is_redundant ? sat::status::euf_learned() : sat::status::euf_asserted();
sat::status st = sat::status::euf(m_is_redundant);
if (m.is_ite(e)) {
app* a = to_app(e);
expr* c = a->get_arg(0);
Expand Down
2 changes: 1 addition & 1 deletion src/sat/smt/euf_proof.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ namespace euf {
for (literal lit : r) lits.push_back(~lit);
if (l != sat::null_literal)
lits.push_back(l);
s().get_drat().add(lits, sat::status::euf_learned());
s().get_drat().add(lits, sat::status::euf(true));
}
}

Expand Down

0 comments on commit 7c2fe46

Please sign in to comment.