3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-05-05 23:05:46 +00:00

tune based on test_l5

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2021-11-26 20:14:00 +01:00
parent 7b85afbe9c
commit 90bd5f186b
5 changed files with 30 additions and 14 deletions

View file

@ -17,9 +17,13 @@ Author:
namespace polysat {
std::ostream& search_state::display(search_item const& item, std::ostream& out) const {
rational r;
switch (item.kind()) {
case search_item_k::assignment:
return out << "v" << item.var() << " := " << value(item.var());
if (value(item.var(), r))
return out << "v" << item.var() << " := " << r;
else
return out << "v" << item.var() << " := *";
case search_item_k::boolean:
return out << item.lit();
}
@ -33,26 +37,31 @@ namespace polysat {
return out;
}
rational search_state::value(pvar v) const {
bool search_state::value(pvar v, rational& val) const {
for (auto const& [p, r] : m_assignment)
if (v == p)
return r;
UNREACHABLE();
return rational::zero();
}
if (v == p) {
val = r;
return true;
}
return false;
}
void search_state::push_assignment(pvar p, rational const& r) {
m_items.push_back(search_item::assignment(p));
m_assignment.push_back({p, r});
}
void search_state::pop_asssignment() {
m_assignment.pop_back();
}
void search_state::push_boolean(sat::literal lit) {
m_items.push_back(search_item::boolean(lit));
}
void search_state::pop() {
auto const& item = m_items.back();
if (item.is_assignment())
if (item.is_assignment() && item.var() == m_assignment.back().first)
m_assignment.pop_back();
m_items.pop_back();
}