3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-24 17:45:32 +00:00

Merge branch 'master' into polysat

This commit is contained in:
Jakob Rath 2022-07-21 12:56:50 +02:00
commit e168d8a2eb
109 changed files with 4372 additions and 2743 deletions

View file

@ -593,6 +593,63 @@ public :
SASSERT_EQ(coeff[2], 0);
SASSERT_EQ(coeff[3], 3);
}
static void factors() {
pdd_manager m(3);
pdd v0 = m.mk_var(0);
pdd v1 = m.mk_var(1);
pdd v2 = m.mk_var(2);
pdd v3 = m.mk_var(3);
pdd v4 = m.mk_var(4);
pdd c1 = v0 * v1 * v2 + v2 * v0 + v1 + 1;
{
auto [vars, p] = c1.var_factors();
VERIFY(p == c1 && vars.empty());
}
{
auto q = c1 * v4;
auto [vars, p] = q.var_factors();
std::cout << p << " " << vars << "\n";
VERIFY(p == c1 && vars.size() == 1 && vars[0] == 4);
}
for (unsigned i = 0; i < 5; ++i) {
auto v = m.mk_var(i);
auto q = c1 * v;
std::cout << i << ": " << q << "\n";
auto [vars, p] = q.var_factors();
std::cout << p << " " << vars << "\n";
VERIFY(p == c1 && vars.size() == 1 && vars[0] == i);
}
for (unsigned i = 0; i < 5; ++i) {
for (unsigned j = 0; j < 5; ++j) {
auto vi = m.mk_var(i);
auto vj = m.mk_var(j);
auto q = c1 * vi * vj;
auto [vars, p] = q.var_factors();
std::cout << p << " " << vars << "\n";
VERIFY(p == c1 && vars.size() == 2);
VERIFY(vars[0] == i || vars[1] == i);
VERIFY(vars[0] == j || vars[1] == j);
}
}
for (unsigned i = 0; i < 5; ++i) {
for (unsigned j = i; j < 5; ++j) {
for (unsigned k = j; k < 5; ++k) {
auto vi = m.mk_var(i);
auto vj = m.mk_var(j);
auto vk = m.mk_var(k);
auto q = c1 * vi * vj * vk;
auto [vars, p] = q.var_factors();
std::cout << p << " " << vars << "\n";
VERIFY(p == c1 && vars.size() == 3);
VERIFY(vars[0] == i || vars[1] == i || vars[2] == i);
VERIFY(vars[0] == j || vars[1] == j || vars[2] == j);
VERIFY(vars[0] == k || vars[1] == k || vars[2] == k);
}
}
}
}
};
}
@ -615,4 +672,5 @@ void tst_pdd() {
dd::test::pow();
dd::test::subst_val();
dd::test::univariate();
dd::test::factors();
}