3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-21 18:50:26 +00:00

resource-limit related fixes in src/test

This commit is contained in:
Christoph M. Wintersteiger 2015-12-18 18:43:38 +00:00
parent e91b1e1da4
commit c2ab9b72dc
11 changed files with 672 additions and 569 deletions

View file

@ -18,11 +18,13 @@ Notes:
--*/
#include"upolynomial.h"
#include"timeit.h"
#include"rlimit.h"
static void tst1() {
reslimit rl;
polynomial::numeral_manager nm;
polynomial::manager m(nm);
upolynomial::manager um(nm);
polynomial::manager m(rl, nm);
upolynomial::manager um(rl, nm);
polynomial_ref x(m);
x = m.mk_polynomial(m.mk_var());
// create univariate polynomial using multivariate polynomial package
@ -36,7 +38,7 @@ static void tst1() {
std::cout << "degree(q): " << um.degree(q) << "\n";
// display coefficients of q
// display coefficients of q
std::cout << "expanded q: ";
for (unsigned i = 0; i < q.size(); i++)
std::cout << nm.to_string(q[i]) << " ";
@ -50,7 +52,7 @@ static void tst1() {
// So, if we perform destructive operations on these coefficients, we must execute the "trim" operation
// before invoking another operation of upolynomial::manager
um.trim(q);
// q after adding 1 to all coefficients
std::cout << "new q: "; um.display(std::cout, q); std::cout << "\n";
@ -64,7 +66,8 @@ static void tst1() {
}
static void tst_isolate_roots(polynomial_ref const & p, unsigned prec, mpbq_manager & bqm, mpbq_vector & roots, mpbq_vector & lowers, mpbq_vector & uppers) {
upolynomial::manager um(p.m().m());
reslimit rl;
upolynomial::manager um(rl, p.m().m());
upolynomial::scoped_numeral_vector q(um);
um.to_numeral_vector(p, q);
std::cout << "isolating roots of: "; um.display(std::cout, q); std::cout << "\n";
@ -119,7 +122,7 @@ static void tst_isolate_roots(polynomial_ref const & p, unsigned prec, mpbq_mana
um.eval_sign_at(q.size(), q.c_ptr(), uppers[i]) == 0 ||
um.sign_variations_at(sseq, lowers[i]) - um.sign_variations_at(sseq, uppers[i]) == 1);
// Fourier sequence may also be used to check if the interval is isolating
TRACE("upolynomial",
TRACE("upolynomial",
tout << "lowers[i]: " << bqm.to_string(lowers[i]) << "\n";
tout << "uppers[i]: " << bqm.to_string(uppers[i]) << "\n";
tout << "fourier lower: " << um.sign_variations_at(fseq, lowers[i]) << "\n";
@ -132,7 +135,7 @@ static void tst_isolate_roots(polynomial_ref const & p, unsigned prec, mpbq_mana
// fsv_upper - fsv_upper - num_roots is even
// Recall that num_roots == 1 in the interval.
(fsv_lower - fsv_upper >= 1 && (fsv_lower - fsv_upper - 1) % 2 == 0));
// Double checking using Descartes bounds for the interval
// Must use square free component.
unsigned dab = um.descartes_bound_a_b(q_sqf.size(), q_sqf.c_ptr(), bqm, lowers[i], uppers[i]);
@ -189,28 +192,29 @@ static void tst_isolate_roots(polynomial_ref const & p, unsigned expected_sz, ra
}
static void tst_isolate_roots() {
reslimit rl;
polynomial::numeral_manager nm;
polynomial::manager m(nm);
polynomial::manager m(rl, nm);
polynomial_ref x(m);
x = m.mk_polynomial(m.mk_var());
// create univariate polynomial using multivariate polynomial package
polynomial_ref p(m);
p = (x-1)*(x-2);
{
p = (x-1)*(x-2);
{
rational ex[2] = { rational(1), rational(2) };
tst_isolate_roots(p, 2, ex);
}
p = (x-1)*(x-1)*x*x*x;
{
{
rational ex[2] = { rational(1), rational(0) };
tst_isolate_roots(p, 2, ex);
}
p = (x^5) - x - 1;
{
{
rational ex[1] = { rational(11673039, 10000000) }; // approximated root
tst_isolate_roots(p, 1, ex);
}
p = (x - 1)*(x + 1)*(x + 2)*(x + 3)*((x - 3)^2);
p = (x - 1)*(x + 1)*(x + 2)*(x + 3)*((x - 3)^2);
{
rational ex[5] = { rational(1), rational(-1), rational(-2), rational(-3), rational(3) };
tst_isolate_roots(p, 5, ex);
@ -271,19 +275,20 @@ static void tst_isolate_roots() {
};
tst_isolate_roots(p, 3, ex, 10);
}
}
static void tst_remove_one_half() {
reslimit rl;
polynomial::numeral_manager nm;
polynomial::manager m(nm);
polynomial::manager m(rl, nm);
polynomial_ref x(m);
x = m.mk_polynomial(m.mk_var());
// create univariate polynomial using multivariate polynomial package
polynomial_ref p(m), r(m);
p = 4*(x^3) - 12*(x^2) - x + 3;
r = 16*(x^2) - 40*x - 24;
upolynomial::manager um(nm);
upolynomial::manager um(rl, nm);
upolynomial::scoped_numeral_vector _p(um), _q(um), _r(um);
um.to_numeral_vector(p, _p);
um.to_numeral_vector(r, _r);
@ -321,15 +326,16 @@ static void tst_gcd(polynomial_ref const & p, polynomial_ref const & q, pmanager
static void tst_gcd() {
std::cout << "\n\nTesting GCD\n";
reslimit rl;
polynomial::numeral_manager nm;
polynomial::manager m(nm);
polynomial::manager m(rl, nm);
polynomial_ref x(m);
x = m.mk_polynomial(m.mk_var());
// create univariate polynomial using multivariate polynomial package
polynomial_ref p(m);
polynomial_ref q(m);
upolynomial::manager um(nm);
upolynomial::manager um(rl, nm);
p = 13*((x - 3)^6)*((x - 5)^5)*((x - 11)^7);
q = derivative(p, 0);
@ -339,7 +345,7 @@ static void tst_gcd() {
p = (x^8) + (x^6) - 3*(x^4) - 3*(x^3) + 8*(x^2) + 2*x - 5;
q = 3*(x^6) + 5*(x^4) - 4*(x^2) - 9*x + 21;
tst_gcd(p, q, um);
p = ((x - 1)^2)*(x - 3)*(x + 2)*((x - 5)^3);
@ -351,8 +357,9 @@ static void tst_gcd() {
static void tst_zp() {
std::cout << "\n\nTesting Z_p\n";
reslimit rl;
polynomial::numeral_manager nm;
polynomial::manager m(nm);
polynomial::manager m(rl, nm);
polynomial_ref x(m);
x = m.mk_polynomial(m.mk_var());
// create univariate polynomial using multivariate polynomial package
@ -363,20 +370,21 @@ static void tst_zp() {
// Computing GCD of p an q in Z[x]
std::cout << "GCD in Z[x]\n";
upolynomial::manager um(nm);
upolynomial::manager um(rl, nm);
tst_gcd(p, q, um);
// Computing GCD of p an q in Z_3[x]
std::cout << "GCD in Z_3[x]\n";
upolynomial::zp_manager um3(nm);
std::cout << "GCD in Z_3[x]\n";
upolynomial::zp_manager um3(rl, nm);
um3.set_zp(3);
tst_gcd(p, q, um3);
}
}
static void tst_zp2() {
std::cout << "\n\nTesting Z_p\n";
reslimit rl;
polynomial::numeral_manager nm;
polynomial::manager m(nm);
polynomial::manager m(rl, nm);
polynomial_ref x(m);
x = m.mk_polynomial(m.mk_var());
// create univariate polynomial using multivariate polynomial package
@ -387,20 +395,21 @@ static void tst_zp2() {
// Computing GCD of p an q in Z[x]
std::cout << "GCD in Z[x]\n";
upolynomial::manager um(nm);
upolynomial::manager um(rl, nm);
tst_gcd(u, v, um);
// Computing GCD of p an q in Z_3[x]
std::cout << "GCD in Z_13[x]\n";
upolynomial::zp_manager um13(nm);
std::cout << "GCD in Z_13[x]\n";
upolynomial::zp_manager um13(rl, nm);
um13.set_zp(13);
tst_gcd(u, v, um13);
}
}
static void tst_ext_gcd() {
std::cout << "\nExtended GCD\n";
reslimit rl;
polynomial::numeral_manager nm;
polynomial::manager m(nm);
polynomial::manager m(rl, nm);
polynomial_ref x(m);
x = m.mk_polynomial(m.mk_var());
// create univariate polynomial using multivariate polynomial package
@ -410,8 +419,8 @@ static void tst_ext_gcd() {
b = (x^8) + (x^6) + 10*(x^4) + 10*(x^3) + 8*(x^2) + 2*x + 8;
// Computing GCD of p an q in Z_3[x]
std::cout << "GCD in Z_13[x]\n";
upolynomial::zp_manager um(nm);
std::cout << "GCD in Z_13[x]\n";
upolynomial::zp_manager um(rl, nm);
um.set_zp(13);
mpzzp_manager & z13 = um.m();
upolynomial::zp_manager::scoped_numeral_vector A(z13), B(z13), U(z13), V(z13), D(z13);
@ -423,12 +432,13 @@ static void tst_ext_gcd() {
std::cout << "U: "; um.display(std::cout, U); std::cout << "\n";
std::cout << "V: "; um.display(std::cout, V); std::cout << "\n";
std::cout << "D: "; um.display(std::cout, D); std::cout << "\n";
}
}
static void tst_ext_gcd_z7() {
std::cout << "\nExtended GCD in Z_7\n";
reslimit rl;
polynomial::numeral_manager nm;
polynomial::manager m(nm);
polynomial::manager m(rl, nm);
polynomial_ref x(m);
x = m.mk_polynomial(m.mk_var());
// create univariate polynomial using multivariate polynomial package
@ -440,8 +450,8 @@ static void tst_ext_gcd_z7() {
// Computing GCD of a and b in Z_3[x]
// expecting: D = 1, U = 3*x + 6, V = 3*x^2 + 6*x + 4
std::cout << "GCD in Z_7[x]\n";
upolynomial::zp_manager um(nm);
std::cout << "GCD in Z_7[x]\n";
upolynomial::zp_manager um(rl, nm);
um.set_zp(7);
mpzzp_manager & z7 = um.m();
upolynomial::zp_manager::scoped_numeral_vector A(z7), B(z7), U(z7), V(z7), D(z7);
@ -453,12 +463,13 @@ static void tst_ext_gcd_z7() {
std::cout << "U: "; um.display(std::cout, U); std::cout << "\n";
std::cout << "V: "; um.display(std::cout, V); std::cout << "\n";
std::cout << "D: "; um.display(std::cout, D); std::cout << "\n";
}
}
static void tst_sturm() {
std::cout << "\nSturm Seq\n";
reslimit rl;
polynomial::numeral_manager nm;
polynomial::manager m(nm);
polynomial::manager m(rl, nm);
polynomial_ref x(m);
x = m.mk_polynomial(m.mk_var());
// create univariate polynomial using multivariate polynomial package
@ -467,7 +478,7 @@ static void tst_sturm() {
// p = ((x^17) + 5*(x^16) + 3*(x^15) + 10*(x^13) + 13*(x^10) + (x^9) + 8*(x^5) + 3*(x^2) + 7)*(((x^5) - x - 1)^2)*(((x^3) - 2)^2);
// p = ((x^17) + 5*(x^16) + 3*(x^15) + 10*(x^13) + 13*(x^10) + (x^9) + 8*(x^5) + 3*(x^2) + 7)*(((x^5) - x - 1))*(((x^3) - 2));
upolynomial::manager um(nm);
upolynomial::manager um(rl, nm);
upolynomial::scoped_numeral_vector _p(um);
upolynomial::scoped_upolynomial_sequence seq2(um);
um.to_numeral_vector(p, _p);
@ -478,7 +489,8 @@ static void tst_sturm() {
static void tst_refinable(polynomial_ref const & p, mpbq_manager & bqm, mpbq & a, mpbq & b) {
upolynomial::manager um(p.m().m());
reslimit rl;
upolynomial::manager um(rl, p.m().m());
upolynomial::scoped_numeral_vector _p(um);
um.to_numeral_vector(p, _p);
std::cout << "before (" << bqm.to_string(a) << ", " << bqm.to_string(b) << ")\n";
@ -497,8 +509,9 @@ static void tst_refinable(polynomial_ref const & p, mpbq_manager & bqm, mpbq & a
static void tst_refinable() {
std::cout << "\nRefinable intervals\n";
reslimit rl;
polynomial::numeral_manager nm;
polynomial::manager m(nm);
polynomial::manager m(rl, nm);
polynomial_ref x(m);
x = m.mk_polynomial(m.mk_var());
// create univariate polynomial using multivariate polynomial package
@ -539,12 +552,12 @@ static void tst_refinable() {
bqm.set(a, 1);
bqm.set(b, 3);
tst_refinable(p, bqm, a, b);
bqm.del(a); bqm.del(b);
}
static void tst_refine(polynomial_ref const & p, mpbq_manager & bqm, mpbq & a, mpbq & b, unsigned prec_k=100) {
upolynomial::manager um(p.m().m());
reslimit rl; upolynomial::manager um(rl, p.m().m());
upolynomial::scoped_numeral_vector _p(um);
um.to_numeral_vector(p, _p);
std::cout << "before (" << bqm.to_string(a) << ", " << bqm.to_string(b) << ")\n";
@ -561,8 +574,9 @@ static void tst_refine(polynomial_ref const & p, mpbq_manager & bqm, mpbq & a, m
static void tst_refine() {
std::cout << "\nRefining intervals\n";
reslimit rl;
polynomial::numeral_manager nm;
polynomial::manager m(nm);
polynomial::manager m(rl, nm);
polynomial_ref x(m);
x = m.mk_polynomial(m.mk_var());
// create univariate polynomial using multivariate polynomial package
@ -574,7 +588,7 @@ static void tst_refine() {
a = 1;
b = 2;
tst_refine(p, bqm, a, b, 20);
p = (x^2) - 2;
std::cout << "p: " << p << "\n";
a = 1;
@ -583,14 +597,15 @@ static void tst_refine() {
}
static void tst_translate_q() {
reslimit rl;
unsynch_mpq_manager nm;
polynomial::manager m(nm);
polynomial::manager m(rl, nm);
polynomial_ref x(m);
x = m.mk_polynomial(m.mk_var());
// create univariate polynomial using multivariate polynomial package
polynomial_ref p(m);
p = (x-1)*(x-2)*(x-3)*(x-4);
upolynomial::manager um(nm);
upolynomial::manager um(rl, nm);
upolynomial::scoped_numeral_vector _p(um), _q(um);
um.to_numeral_vector(p, _p);
SASSERT(um.eval_sign_at(_p.size(), _p.c_ptr(), mpq(1)) == 0);
@ -637,7 +652,8 @@ static void tst_translate_q() {
}
static void tst_convert_q2bq(unsynch_mpq_manager & m, polynomial_ref const & p, mpq const & a, mpq const & b) {
upolynomial::manager um(m);
reslimit rl;
upolynomial::manager um(rl, m);
upolynomial::scoped_numeral_vector _p(um);
um.to_numeral_vector(p, _p);
std::cout << "\np: ";
@ -657,8 +673,9 @@ static void tst_convert_q2bq(unsynch_mpq_manager & m, polynomial_ref const & p,
}
static void tst_convert_q2bq() {
reslimit rl;
unsynch_mpq_manager nm;
polynomial::manager m(nm);
polynomial::manager m(rl, nm);
polynomial_ref x(m);
x = m.mk_polynomial(m.mk_var());
// create univariate polynomial using multivariate polynomial package
@ -704,8 +721,9 @@ static void tst_convert_q2bq() {
}
static void tst_sturm2() {
reslimit rl;
polynomial::numeral_manager nm;
polynomial::manager m(nm);
polynomial::manager m(rl, nm);
polynomial_ref x(m);
x = m.mk_polynomial(m.mk_var());
// create univariate polynomial using multivariate polynomial package
@ -715,7 +733,7 @@ static void tst_sturm2() {
p = (x^16) - 136*(x^14) + 6476*(x^12) - 141912*(x^10) + 1513334*(x^8) - 7453176*(x^6) + 13950764*(x^4) - 5596840*(x^2) + 46225;
q = ((x^8) - 40*(x^6) + 352*(x^4) - 960*(x^2) + 576)^2;
upolynomial::manager um(nm);
upolynomial::manager um(rl, nm);
upolynomial::scoped_numeral_vector _p(um), _q(um);
upolynomial::scoped_upolynomial_sequence seq2(um);
um.to_numeral_vector(p, _p);
@ -735,7 +753,7 @@ static void tst_isolate_roots2() {
// create univariate polynomial using multivariate polynomial package
polynomial_ref p(m);
p = (2*x - 1)*(x - 21)*(x + 12)*(x - 19)*(x + 11)*(x + 34)*(x - 9)*(x - 72)*(10000*x - 4999)*((x^5) - x - 1)*((x^2) - 2)*((x^2) - 3)*((x^7) - 3)*((x^101) - 3);
{
{
tst_isolate_roots(p, 10);
}
}
@ -769,7 +787,7 @@ static void tst_isolate_roots3() {
q = (x - x1 - x2 - x3 - x4 - x5 - x6);
r = resultant(resultant(resultant(resultant(resultant(resultant(q, p1, 1), p2, 2), p3, 3), p4, 4), p5, 5), p6, 6);
std::cout << "r: " << r << "\n";
{
{
timeit timer(true, "isolate");
tst_isolate_roots(r, 10);
}
@ -784,7 +802,7 @@ static void tst_gcd2() {
polynomial_ref p(m);
p = ((x^1000) - x + 1)^5;
upolynomial::manager um(nm);
reslimit rl; upolynomial::manager um(rl, nm);
upolynomial::scoped_numeral_vector _p(um);
upolynomial::scoped_numeral_vector _p_sqf(um);
um.to_numeral_vector(p, _p);
@ -794,24 +812,26 @@ static void tst_gcd2() {
}
um.display(std::cout, _p_sqf.size(), _p_sqf.c_ptr()); std::cout << "\n";
}
#endif
#endif
static void tst_isolate_roots5() {
reslimit rl;
polynomial::numeral_manager nm;
polynomial::manager m(nm);
polynomial::manager m(rl, nm);
polynomial_ref x(m);
x = m.mk_polynomial(m.mk_var());
// create univariate polynomial using multivariate polynomial package
polynomial_ref p(m);
p = (x^70) - 6*(x^65) - (x^60) + 60*(x^55) - 54*(x^50) - 230*(x^45) + 274*(x^40) + 542*(x^35) - 615*(x^30)
- 1120*(x^25) + 1500*(x^20) - 160*(x^15) - 395*(x^10) + 76*(x^5) + 34;
{
{
tst_isolate_roots(p, 10);
}
}
static void tst_exact_div(polynomial_ref const & p1, polynomial_ref const & p2, bool expected, polynomial_ref const & expected_q) {
upolynomial::manager um(p1.m().m());
reslimit rl;
upolynomial::manager um(rl, p1.m().m());
upolynomial::scoped_numeral_vector _p1(um), _p2(um), _q(um), _r(um);
um.to_numeral_vector(p1, _p1);
um.to_numeral_vector(p2, _p2);
@ -834,8 +854,9 @@ static void tst_exact_div(polynomial_ref const & p1, polynomial_ref const & p2,
}
static void tst_exact_div() {
reslimit rl;
polynomial::numeral_manager nm;
polynomial::manager m(nm);
polynomial::manager m(rl, nm);
polynomial_ref x(m);
x = m.mk_polynomial(m.mk_var());
// create univariate polynomial using multivariate polynomial package
@ -860,7 +881,7 @@ static void tst_fact(polynomial_ref const & p, unsigned num_distinct_factors, up
SASSERT(is_univariate(p));
std::cout << "---------------\n";
std::cout << "p: " << p << std::endl;
upolynomial::manager um(p.m().m());
reslimit rl; upolynomial::manager um(rl, p.m().m());
upolynomial::scoped_numeral_vector _p(um);
upolynomial::factors fs(um);
um.to_numeral_vector(p, _p);
@ -878,8 +899,9 @@ static void tst_fact(polynomial_ref const & p, unsigned num_distinct_factors, up
}
static void tst_fact() {
reslimit rl;
polynomial::numeral_manager nm;
polynomial::manager m(nm);
polynomial::manager m(rl, nm);
polynomial_ref x0(m);
x0 = m.mk_polynomial(m.mk_var());
tst_fact((x0^4) + (x0^2) - 20, 3);
@ -899,7 +921,7 @@ static void tst_fact() {
tst_fact((x0^70) - 6*(x0^65) - (x0^60) + 60*(x0^55) - 54*(x0^50) - 230*(x0^45) + 274*(x0^40) + 542*(x0^35) - 615*(x0^30) - 1120*(x0^25) + 1500*(x0^20) - 160*(x0^15) - 395*(x0^10) + 76*(x0^5) + 34, 3);
tst_fact(((x0^4) - 8*(x0^2)), 2);
tst_fact((x0^5) - 2*(x0^3) + x0 - 1, 1);
tst_fact( (x0^25) - 4*(x0^21) - 5*(x0^20) + 6*(x0^17) + 11*(x0^16) + 10*(x0^15) - 4*(x0^13) - 7*(x0^12) - 9*(x0^11) - 10*(x0^10) +
tst_fact( (x0^25) - 4*(x0^21) - 5*(x0^20) + 6*(x0^17) + 11*(x0^16) + 10*(x0^15) - 4*(x0^13) - 7*(x0^12) - 9*(x0^11) - 10*(x0^10) +
(x0^9) + (x0^8) + (x0^7) + (x0^6) + 3*(x0^5) + x0 - 1, 2);
tst_fact( (x0^25) - 10*(x0^21) - 10*(x0^20) - 95*(x0^17) - 470*(x0^16) - 585*(x0^15) - 40*(x0^13) - 1280*(x0^12) - 4190*(x0^11) - 3830*(x0^10) + 400*(x0^9)+ 1760*(x0^8) + 760*(x0^7) - 2280*(x0^6) + 449*(x0^5) + 640*(x0^3) - 640*(x0^2) + 240*x0 - 32, 2);
tst_fact( x0^10, 1);
@ -919,7 +941,7 @@ static void tst_fact() {
tst_fact( (x0^50) - 10*(x0^40) + 38*(x0^30) - 2*(x0^25) - 100*(x0^20) - 40*(x0^15) + 121*(x0^10) - 38*(x0^5) - 17, 1);
tst_fact( (((x0^5) + 5*(x0^4) + 10*(x0^3) + 10*(x0^2) + 5*x0)^10)
+ 10*(((x0^5) + 5*(x0^4) + 10*(x0^3) + 10*(x0^2) + 5*x0)^9)
+ 10*(((x0^5) + 5*(x0^4) + 10*(x0^3) + 10*(x0^2) + 5*x0)^9)
+ 35*(((x0^5) + 5*(x0^4) + 10*(x0^3) + 10*(x0^2) + 5*x0)^8)
+ 40*(((x0^5) + 5*(x0^4) + 10*(x0^3) + 10*(x0^2) + 5*x0)^7)
- 32*(((x0^5) + 5*(x0^4) + 10*(x0^3) + 10*(x0^2) + 5*x0)^6)
@ -934,37 +956,37 @@ static void tst_fact() {
tst_fact( ((x0^5) - 15552)*
((x0^20)- 15708*(x0^15) + rational("138771724")*(x0^10)- rational("432104148432")*(x0^5) + rational("614198284585616")),
2);
tst_fact( (x0^25) -
rational("3125")*(x0^21) -
rational("15630")*(x0^20) +
rational("3888750")*(x0^17) +
rational("38684375")*(x0^16) +
rational("95765635")*(x0^15) -
rational("2489846500")*(x0^13) -
rational("37650481875")*(x0^12) -
rational("190548065625")*(x0^11) -
rational("323785250010")*(x0^10) +
rational("750249453025")*(x0^9) +
rational("14962295699875")*(x0^8) +
rational("111775113235000")*(x0^7) +
rational("370399286731250")*(x0^6) +
rational("362903064503129")*(x0^5) -
rational("2387239013984400")*(x0^4) -
rational("23872390139844000")*(x0^3) -
rational("119361950699220000")*(x0^2) -
rational("298404876748050000")*x0 -
tst_fact( (x0^25) -
rational("3125")*(x0^21) -
rational("15630")*(x0^20) +
rational("3888750")*(x0^17) +
rational("38684375")*(x0^16) +
rational("95765635")*(x0^15) -
rational("2489846500")*(x0^13) -
rational("37650481875")*(x0^12) -
rational("190548065625")*(x0^11) -
rational("323785250010")*(x0^10) +
rational("750249453025")*(x0^9) +
rational("14962295699875")*(x0^8) +
rational("111775113235000")*(x0^7) +
rational("370399286731250")*(x0^6) +
rational("362903064503129")*(x0^5) -
rational("2387239013984400")*(x0^4) -
rational("23872390139844000")*(x0^3) -
rational("119361950699220000")*(x0^2) -
rational("298404876748050000")*x0 -
rational("298500366308609376"), 2);
tst_fact( rational("54")*(x0^24) - (x0^27) - 324*(x0^21) + rational("17496")*(x0^18) - 34992*(x0^15)+ rational("1889568")*(x0^12)- 1259712*(x0^9) + rational("68024448")*(x0^6), 3);
tst_fact( ((x0^3)- 432)*(((x0^3)+54)^2)*((x0^6)+108)*((x0^6)+6912)*((x0^6)- 324*(x0^3)+37044),
5);
tst_fact( ((x0^6)- 6*(x0^4) - 864*(x0^3) + 12*(x0^2) - 5184*x0 + 186616)*
(((x0^6) - 6*(x0^4) + 108*(x0^3) + 12*(x0^2) + 648*x0 + 2908)^2)*
((x0^12) - 12*(x0^10) + 60*(x0^8) + 56*(x0^6) + 6720*(x0^4) + 12768*(x0^2) + 13456)*
((x0^12) - 12*(x0^10) + 60*(x0^8) + 13664*(x0^6) + 414960*(x0^4) + 829248*(x0^2) + 47886400)*
((x0^12) - 12*(x0^10) - 648*(x0^9)+ 60*(x0^8) + 178904*(x0^6) + 15552*(x0^5) + 1593024*(x0^4) - 24045984*(x0^3) +
((x0^12) - 12*(x0^10) - 648*(x0^9)+ 60*(x0^8) + 178904*(x0^6) + 15552*(x0^5) + 1593024*(x0^4) - 24045984*(x0^3) +
5704800*(x0^2) - 143995968*x0 + 1372010896),
5);
}
@ -975,7 +997,7 @@ static void tst_rem(polynomial_ref const & p, polynomial_ref const & q, polynomi
std::cout << "---------------\n";
std::cout << "p: " << p << std::endl;
std::cout << "q: " << q << std::endl;
upolynomial::manager um(p.m().m());
reslimit rl; upolynomial::manager um(rl, p.m().m());
upolynomial::scoped_numeral_vector _p(um), _q(um), _r(um);
um.to_numeral_vector(p, _p);
um.to_numeral_vector(q, _q);
@ -987,8 +1009,9 @@ static void tst_rem(polynomial_ref const & p, polynomial_ref const & q, polynomi
}
static void tst_rem() {
reslimit rl;
polynomial::numeral_manager nm;
polynomial::manager m(nm);
polynomial::manager m(rl, nm);
polynomial_ref x0(m), zero(m), one(m);
x0 = m.mk_polynomial(m.mk_var());
zero = m.mk_zero();
@ -1002,7 +1025,7 @@ static void tst_lower_bound(polynomial_ref const & p) {
SASSERT(is_univariate(p));
std::cout << "---------------\n";
std::cout << "p: " << p << std::endl;
upolynomial::manager um(p.m().m());
reslimit rl; upolynomial::manager um(rl, p.m().m());
upolynomial::scoped_numeral_vector _p(um);
um.to_numeral_vector(p, _p);
std::cout << "_p: "; um.display(std::cout, _p); std::cout << "\n";
@ -1012,8 +1035,9 @@ static void tst_lower_bound(polynomial_ref const & p) {
}
static void tst_lower_bound() {
reslimit rl;
polynomial::numeral_manager nm;
polynomial::manager m(nm);
polynomial::manager m(rl, nm);
polynomial_ref x(m), zero(m), one(m);
x = m.mk_polynomial(m.mk_var());
zero = m.mk_zero();
@ -1031,7 +1055,7 @@ static void tst_lower_bound() {
tst_lower_bound(((x^17) + 5*(x^16) + 3*(x^15) + 10*(x^13) + 13*(x^10) + (x^9) + 8*(x^5) + 3*(x^2) + 7)*(((x^5) - x - 1)^2)*(((x^3) - 2)^2));
tst_lower_bound((((x^5) - 1000000000)^3)*((3*x - 10000000)^2)*((10*x - 632)^2));
}
void tst_upolynomial() {
set_verbosity_level(1000);
enable_trace("mpz_gcd");