mirror of
https://github.com/Z3Prover/z3
synced 2025-07-24 05:08:55 +00:00
parent
c2108f74f1
commit
f537167080
2 changed files with 16 additions and 6 deletions
|
@ -738,6 +738,7 @@ namespace pdr {
|
||||||
// model_node
|
// model_node
|
||||||
|
|
||||||
void model_node::set_closed() {
|
void model_node::set_closed() {
|
||||||
|
TRACE("pdr", tout << state() << "\n";);
|
||||||
pt().close(state());
|
pt().close(state());
|
||||||
m_closed = true;
|
m_closed = true;
|
||||||
}
|
}
|
||||||
|
@ -928,7 +929,7 @@ namespace pdr {
|
||||||
model_node* p = n.parent();
|
model_node* p = n.parent();
|
||||||
while (p) {
|
while (p) {
|
||||||
if (p->state() == n.state()) {
|
if (p->state() == n.state()) {
|
||||||
TRACE("pdr", tout << "repeated\n";);
|
TRACE("pdr", tout << n.state() << "repeated\n";);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
p = p->parent();
|
p = p->parent();
|
||||||
|
@ -1018,6 +1019,11 @@ namespace pdr {
|
||||||
SASSERT(n1->children().empty());
|
SASSERT(n1->children().empty());
|
||||||
enqueue_leaf(n1);
|
enqueue_leaf(n1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!nodes.empty() && n.get_model_ptr() && backtrack) {
|
||||||
|
model_ref mr(n.get_model_ptr());
|
||||||
|
nodes[0]->set_model(mr);
|
||||||
|
}
|
||||||
if (nodes.empty()) {
|
if (nodes.empty()) {
|
||||||
cache(n).remove(n.state());
|
cache(n).remove(n.state());
|
||||||
}
|
}
|
||||||
|
@ -1149,17 +1155,21 @@ namespace pdr {
|
||||||
ast_manager& m = n->pt().get_manager();
|
ast_manager& m = n->pt().get_manager();
|
||||||
if (!n->get_model_ptr()) {
|
if (!n->get_model_ptr()) {
|
||||||
if (models.find(n->state(), md)) {
|
if (models.find(n->state(), md)) {
|
||||||
TRACE("pdr", tout << mk_pp(n->state(), m) << "\n";);
|
TRACE("pdr", tout << n->state() << "\n";);
|
||||||
model_ref mr(md);
|
model_ref mr(md);
|
||||||
n->set_model(mr);
|
n->set_model(mr);
|
||||||
datalog::rule const* rule = rules.find(n->state());
|
datalog::rule const* rule = rules.find(n->state());
|
||||||
n->set_rule(rule);
|
n->set_rule(rule);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
TRACE("pdr", tout << "no model for " << n->state() << "\n";);
|
||||||
IF_VERBOSE(1, n->display(verbose_stream() << "no model:\n", 0);
|
IF_VERBOSE(1, n->display(verbose_stream() << "no model:\n", 0);
|
||||||
verbose_stream() << mk_pp(n->state(), m) << "\n";);
|
verbose_stream() << n->state() << "\n";);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
TRACE("pdr", tout << n->state() << "\n";);
|
||||||
|
}
|
||||||
todo.pop_back();
|
todo.pop_back();
|
||||||
todo.append(n->children().size(), n->children().c_ptr());
|
todo.append(n->children().size(), n->children().c_ptr());
|
||||||
}
|
}
|
||||||
|
@ -2027,11 +2037,11 @@ namespace pdr {
|
||||||
switch (expand_state(n, cube, uses_level)) {
|
switch (expand_state(n, cube, uses_level)) {
|
||||||
case l_true:
|
case l_true:
|
||||||
if (n.level() == 0) {
|
if (n.level() == 0) {
|
||||||
TRACE("pdr", tout << "reachable at level 0\n";);
|
TRACE("pdr", n.display(tout << "reachable at level 0\n", 0););
|
||||||
close_node(n);
|
close_node(n);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
TRACE("pdr", tout << "node: " << &n << "\n";);
|
TRACE("pdr", n.display(tout, 0););
|
||||||
create_children(n);
|
create_children(n);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -240,7 +240,7 @@ namespace pdr {
|
||||||
void check_pre_closed();
|
void check_pre_closed();
|
||||||
void set_closed();
|
void set_closed();
|
||||||
void set_open();
|
void set_open();
|
||||||
void set_pre_closed() { m_closed = true; }
|
void set_pre_closed() { TRACE("pdr", tout << state() << "\n";); m_closed = true; }
|
||||||
void reset() { m_children.reset(); }
|
void reset() { m_children.reset(); }
|
||||||
|
|
||||||
void set_rule(datalog::rule const* r) { m_rule = r; }
|
void set_rule(datalog::rule const* r) { m_rule = r; }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue