mirror of
https://github.com/Z3Prover/z3
synced 2025-06-06 22:23:22 +00:00
put add_var on the trail
This commit is contained in:
parent
1033c7e536
commit
efe0fa8e15
1 changed files with 7 additions and 5 deletions
|
@ -202,8 +202,8 @@ namespace polysat {
|
||||||
unsigned const target_lvl = lvl - num_scopes;
|
unsigned const target_lvl = lvl - num_scopes;
|
||||||
unsigned const target_size = m_scopes[target_lvl];
|
unsigned const target_size = m_scopes[target_lvl];
|
||||||
m_scopes.shrink(target_lvl);
|
m_scopes.shrink(target_lvl);
|
||||||
unsigned_vector replay_add_var;
|
|
||||||
svector<trail_item> replay_trail;
|
svector<trail_item> replay_trail;
|
||||||
|
unsigned_vector replay_add_var_trail;
|
||||||
svector<std::pair<extract_args, pvar>> replay_extract_trail;
|
svector<std::pair<extract_args, pvar>> replay_extract_trail;
|
||||||
svector<concat_info> replay_concat_trail;
|
svector<concat_info> replay_concat_trail;
|
||||||
unsigned num_replay_concat = 0;
|
unsigned num_replay_concat = 0;
|
||||||
|
@ -211,7 +211,7 @@ namespace polysat {
|
||||||
switch (m_trail[i]) {
|
switch (m_trail[i]) {
|
||||||
case trail_item::add_var:
|
case trail_item::add_var:
|
||||||
replay_trail.push_back(trail_item::add_var);
|
replay_trail.push_back(trail_item::add_var);
|
||||||
replay_add_var.push_back(width(m_var2slice.back()));
|
replay_add_var_trail.push_back(width(m_var2slice.back()));
|
||||||
undo_add_var();
|
undo_add_var();
|
||||||
break;
|
break;
|
||||||
case trail_item::split_core:
|
case trail_item::split_core:
|
||||||
|
@ -245,13 +245,13 @@ namespace polysat {
|
||||||
m_trail.shrink(target_size);
|
m_trail.shrink(target_size);
|
||||||
// replay add_var/mk_extract/mk_concat in the same order
|
// replay add_var/mk_extract/mk_concat in the same order
|
||||||
// (only until polysat::solver supports proper garbage collection of variables)
|
// (only until polysat::solver supports proper garbage collection of variables)
|
||||||
unsigned add_var_idx = replay_add_var.size();
|
unsigned add_var_idx = replay_add_var_trail.size();
|
||||||
unsigned extract_idx = replay_extract_trail.size();
|
unsigned extract_idx = replay_extract_trail.size();
|
||||||
unsigned concat_idx = m_concat_trail.size() - num_replay_concat;
|
unsigned concat_idx = m_concat_trail.size() - num_replay_concat;
|
||||||
for (auto it = replay_trail.rbegin(); it != replay_trail.rend(); ++it) {
|
for (auto it = replay_trail.rbegin(); it != replay_trail.rend(); ++it) {
|
||||||
switch (*it) {
|
switch (*it) {
|
||||||
case trail_item::add_var: {
|
case trail_item::add_var: {
|
||||||
unsigned const sz = replay_add_var[--add_var_idx];
|
unsigned const sz = replay_add_var_trail[--add_var_idx];
|
||||||
add_var(sz);
|
add_var(sz);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -278,6 +278,8 @@ namespace polysat {
|
||||||
pvar const v = m_var2slice.size();
|
pvar const v = m_var2slice.size();
|
||||||
enode* s = alloc_slice(bit_width, v);
|
enode* s = alloc_slice(bit_width, v);
|
||||||
m_var2slice.push_back(s);
|
m_var2slice.push_back(s);
|
||||||
|
m_trail.push_back(trail_item::add_var);
|
||||||
|
LOG("add_var: v" << v << " -> " << slice_pp(*this, s));
|
||||||
}
|
}
|
||||||
|
|
||||||
void slicing::undo_add_var() {
|
void slicing::undo_add_var() {
|
||||||
|
@ -314,7 +316,7 @@ namespace polysat {
|
||||||
i.reset();
|
i.reset();
|
||||||
i.var = var;
|
i.var = var;
|
||||||
enode* n = m_egraph.mk(e, 0, num_args, args); // NOTE: the egraph keeps a strong reference to 'e'
|
enode* n = m_egraph.mk(e, 0, num_args, args); // NOTE: the egraph keeps a strong reference to 'e'
|
||||||
// LOG("alloc_enode: " << e_pp(n));
|
LOG_V(10, "alloc_enode: " << slice_pp(*this, n) << " " << e_pp(n));
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue