3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-17 03:16:17 +00:00

reverse the order of vars for pdd_grobner, use pdd_grobner.reset()

Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
Lev Nachmanson 2019-12-28 15:58:02 -08:00
parent b5364b787c
commit 407c8a60db
3 changed files with 87 additions and 97 deletions

View file

@ -259,7 +259,6 @@ namespace dd {
void reset(unsigned_vector const& level2var);
void set_max_num_nodes(unsigned n) { m_max_num_nodes = n; }
unsigned_vector const& get_level2var() const { return m_level2var; }
unsigned_vector& get_level2var() { return m_level2var; }
pdd mk_var(unsigned i);
pdd mk_val(rational const& r);

View file

@ -1596,17 +1596,20 @@ void core::set_active_vars_weights(nex_creator& nc) {
void core::set_level2var_for_pdd_grobner() {
unsigned n = m_pdd_manager.get_level2var().size();
unsigned_vector level2var(n);
unsigned_vector sorted_vars(n);
for (unsigned j = 0; j < n; j++)
level2var[j] = j;
sorted_vars[j] = j;
// sort that the larger weights are in beginning
std::sort(level2var.begin(), level2var.end(), [this](unsigned a, unsigned b) {
std::sort(sorted_vars.begin(), sorted_vars.end(), [this](unsigned a, unsigned b) {
unsigned wa = get_var_weight(a);
unsigned wb = get_var_weight(b);
return wa > wb || (wa == wb && a > b); });
unsigned_vector& l2v = m_pdd_manager.get_level2var();
return wa < wb || (wa == wb && a < b); });
unsigned_vector l2v(n);
for (unsigned j = 0; j < n; j++)
l2v[j] = level2var[j];
l2v[j] = sorted_vars[j];
m_pdd_manager.reset(l2v);
}
unsigned core::get_var_weight(lpvar j) const {

View file

@ -1,6 +1,4 @@
#include "math/dd/dd_pdd.h"
#include "math/dd/pdd_eval.h"
#include "math/dd/pdd_interval.h"
namespace dd {
static void test1() {
@ -69,22 +67,6 @@ static void test2() {
VERIFY(r_fe == f);
}
static void test3() {
std::cout << "\ntest3\n";
pdd_manager m(4);
pdd a = m.mk_var(0);
pdd b = m.mk_var(1);
pdd c = m.mk_var(2);
pdd d = m.mk_var(3);
pdd e = a + c;
for (unsigned i = 0; i < 5; i++) {
e = e * e;
}
e = e * b;
// std::cout << e << "\n";
}
static void test_reset() {
std::cout << "\ntest reset\n";
pdd_manager m(4);
@ -128,18 +110,24 @@ static void test5() {
SASSERT(e == f);
}
static void test6() {
std::cout << "\ntest6\n";
pdd_manager m(5);
static void test_reset() {
std::cout << "\ntest reset\n";
pdd_manager m(4);
pdd a = m.mk_var(0);
pdd b = m.mk_var(1);
pdd c = m.mk_var(2);
pdd d = m.mk_var(3);
pdd e = a * b * b * d + 2*a*b*c + (b*c*d) + (b*c) + (c*d) + 3;
pdd f = a * d * c + a + d;
pdd l = m.zero();
VERIFY(m.try_spoly(e, f, l));
std::cout << "superpose\n" << e << "\nand\n" << f << "\nresult\n" << l << "\n";
std::cout << (a + b)*(c + d) << "\n";
unsigned_vector l2v;
for (unsigned i = 0; i < 4; ++i)
l2v.push_back(3 - i);
m.reset(l2v);
a = m.mk_var(0);
b = m.mk_var(1);
c = m.mk_var(2);
d = m.mk_var(3);
std::cout << (a + b)*(c + d) << "\n";
}
void test_iterator() {