mirror of
https://github.com/Z3Prover/z3
synced 2025-06-29 17:38:45 +00:00
parent
12f9336fec
commit
fae66671d8
3 changed files with 22 additions and 28 deletions
|
@ -216,13 +216,17 @@ namespace smt {
|
|||
SASSERT(m_manager.is_bool(n));
|
||||
if (is_gate(m_manager, n)) {
|
||||
switch(to_app(n)->get_decl_kind()) {
|
||||
case OP_AND:
|
||||
UNREACHABLE();
|
||||
case OP_AND: {
|
||||
for (expr * arg : *to_app(n)) {
|
||||
internalize(arg, true);
|
||||
literal lit = get_literal(arg);
|
||||
mk_root_clause(1, &lit, pr);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case OP_OR: {
|
||||
literal_buffer lits;
|
||||
unsigned num = to_app(n)->get_num_args();
|
||||
for (unsigned i = 0; i < num; i++) {
|
||||
expr * arg = to_app(n)->get_arg(i);
|
||||
for (expr * arg : *to_app(n)) {
|
||||
internalize(arg, true);
|
||||
lits.push_back(get_literal(arg));
|
||||
}
|
||||
|
@ -294,8 +298,7 @@ namespace smt {
|
|||
sort * s = m_manager.get_sort(n->get_arg(0));
|
||||
sort_ref u(m_manager.mk_fresh_sort("distinct-elems"), m_manager);
|
||||
func_decl_ref f(m_manager.mk_fresh_func_decl("distinct-aux-f", "", 1, &s, u), m_manager);
|
||||
for (unsigned i = 0; i < num_args; i++) {
|
||||
expr * arg = n->get_arg(i);
|
||||
for (expr * arg : *n) {
|
||||
app_ref fapp(m_manager.mk_app(f, arg), m_manager);
|
||||
app_ref val(m_manager.mk_fresh_const("unique-value", u), m_manager);
|
||||
enode * e = mk_enode(val, false, false, true);
|
||||
|
@ -826,9 +829,7 @@ namespace smt {
|
|||
void context::internalize_uninterpreted(app * n) {
|
||||
SASSERT(!e_internalized(n));
|
||||
// process args
|
||||
unsigned num = n->get_num_args();
|
||||
for (unsigned i = 0; i < num; i++) {
|
||||
expr * arg = n->get_arg(i);
|
||||
for (expr * arg : *n) {
|
||||
internalize(arg, false);
|
||||
SASSERT(e_internalized(arg));
|
||||
}
|
||||
|
@ -1542,10 +1543,9 @@ namespace smt {
|
|||
void context::add_and_rel_watches(app * n) {
|
||||
if (relevancy()) {
|
||||
relevancy_eh * eh = m_relevancy_propagator->mk_and_relevancy_eh(n);
|
||||
unsigned num = n->get_num_args();
|
||||
for (unsigned i = 0; i < num; i++) {
|
||||
for (expr * arg : *n) {
|
||||
// if one child is assigned to false, the and-parent must be notified
|
||||
literal l = get_literal(n->get_arg(i));
|
||||
literal l = get_literal(arg);
|
||||
add_rel_watch(~l, eh);
|
||||
}
|
||||
}
|
||||
|
@ -1554,10 +1554,9 @@ namespace smt {
|
|||
void context::add_or_rel_watches(app * n) {
|
||||
if (relevancy()) {
|
||||
relevancy_eh * eh = m_relevancy_propagator->mk_or_relevancy_eh(n);
|
||||
unsigned num = n->get_num_args();
|
||||
for (unsigned i = 0; i < num; i++) {
|
||||
for (expr * arg : *n) {
|
||||
// if one child is assigned to true, the or-parent must be notified
|
||||
literal l = get_literal(n->get_arg(i));
|
||||
literal l = get_literal(arg);
|
||||
add_rel_watch(l, eh);
|
||||
}
|
||||
}
|
||||
|
@ -1588,9 +1587,8 @@ namespace smt {
|
|||
TRACE("mk_and_cnstr", tout << "l: "; display_literal(tout, l); tout << "\n";);
|
||||
literal_buffer buffer;
|
||||
buffer.push_back(l);
|
||||
unsigned num_args = n->get_num_args();
|
||||
for (unsigned i = 0; i < num_args; i++) {
|
||||
literal l_arg = get_literal(n->get_arg(i));
|
||||
for (expr * arg : *n) {
|
||||
literal l_arg = get_literal(arg);
|
||||
TRACE("mk_and_cnstr", tout << "l_arg: "; display_literal(tout, l_arg); tout << "\n";);
|
||||
mk_gate_clause(~l, l_arg);
|
||||
buffer.push_back(~l_arg);
|
||||
|
@ -1602,9 +1600,8 @@ namespace smt {
|
|||
literal l = get_literal(n);
|
||||
literal_buffer buffer;
|
||||
buffer.push_back(~l);
|
||||
unsigned num_args = n->get_num_args();
|
||||
for (unsigned i = 0; i < num_args; i++) {
|
||||
literal l_arg = get_literal(n->get_arg(i));
|
||||
for (expr * arg : *n) {
|
||||
literal l_arg = get_literal(arg);
|
||||
mk_gate_clause(l, ~l_arg);
|
||||
buffer.push_back(l_arg);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue