mirror of
https://github.com/Z3Prover/z3
synced 2025-04-23 09:05:31 +00:00
add recfuns to Java #4820
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
6aba325cea
commit
d6a5ef4343
6 changed files with 71 additions and 17 deletions
|
@ -112,11 +112,6 @@ namespace sat {
|
|||
}
|
||||
}
|
||||
|
||||
if (n == 3 && c[0] == literal(9357, true) && c[1] == literal(25, true) && c[2] == literal(8691, false)) {
|
||||
SASSERT(false);
|
||||
UNREACHABLE();
|
||||
}
|
||||
|
||||
if (!st.is_sat()) {
|
||||
for (char ch : m_theory[st.get_th()])
|
||||
buffer[len++] = ch;
|
||||
|
@ -147,6 +142,11 @@ namespace sat {
|
|||
buffer[len++] = '\n';
|
||||
m_out->write(buffer, len);
|
||||
|
||||
if (n == 3 && c[0] == literal(9357, true) && c[1] == literal(25, true) && c[2] == literal(8691, false)) {
|
||||
m_out->flush();
|
||||
SASSERT(false);
|
||||
UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
void drat::dump_activity() {
|
||||
|
|
|
@ -341,18 +341,32 @@ namespace bv {
|
|||
void solver::log_drat(bv_justification const& c) {
|
||||
// introduce dummy literal for equality.
|
||||
sat::literal leq(s().num_vars() + 1, false);
|
||||
expr* e1 = var2expr(c.m_v1);
|
||||
expr* e2 = var2expr(c.m_v2);
|
||||
expr_ref eq(m.mk_eq(e1, e2), m);
|
||||
ctx.get_drat().def_begin('e', eq->get_id(), std::string("="));
|
||||
ctx.get_drat().def_add_arg(e1->get_id());
|
||||
ctx.get_drat().def_add_arg(e2->get_id());
|
||||
ctx.get_drat().def_end();
|
||||
ctx.get_drat().bool_def(leq.var(), eq->get_id());
|
||||
if (c.m_kind != bv_justification::kind_t::bit2ne) {
|
||||
expr* e1 = var2expr(c.m_v1);
|
||||
expr* e2 = var2expr(c.m_v2);
|
||||
expr_ref eq(m.mk_eq(e1, e2), m);
|
||||
ctx.get_drat().def_begin('e', eq->get_id(), std::string("="));
|
||||
ctx.get_drat().def_add_arg(e1->get_id());
|
||||
ctx.get_drat().def_add_arg(e2->get_id());
|
||||
ctx.get_drat().def_end();
|
||||
ctx.get_drat().bool_def(leq.var(), eq->get_id());
|
||||
}
|
||||
|
||||
static unsigned s_count = 0;
|
||||
|
||||
sat::literal_vector lits;
|
||||
switch (c.m_kind) {
|
||||
case bv_justification::kind_t::eq2bit:
|
||||
++s_count;
|
||||
std::cout << "eq2bit " << s_count << "\n";
|
||||
#if 0
|
||||
if (s_count == 1899) {
|
||||
std::cout << "eq2bit " << mk_pp(var2expr(c.m_v1), m) << " == " << mk_pp(var2expr(c.m_v2), m) << "\n";
|
||||
std::cout << literal2expr(~c.m_antecedent) << "\n";
|
||||
std::cout << literal2expr(c.m_consequent) << "\n";
|
||||
INVOKE_DEBUGGER();
|
||||
}
|
||||
#endif
|
||||
lits.push_back(~leq);
|
||||
lits.push_back(~c.m_antecedent);
|
||||
lits.push_back(c.m_consequent);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue