mirror of
https://github.com/Z3Prover/z3
synced 2025-04-26 02:25:32 +00:00
avoid going creating hnf_cuts if all involved vars have integral values
Signed-off-by: Lev Nachmanson <levnach@hotmail.com> add explanations to hnf cuts Signed-off-by: Lev Nachmanson <levnach@hotmail.com> nits and virtual methods (#68) * local Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * virtual method in bound propagator Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> cleanup from std::cout Signed-off-by: Lev Nachmanson <levnach@hotmail.com> handle the case when the number of terms is greater than the number of variables in hnf Signed-off-by: Lev Nachmanson <levnach@hotmail.com> method name's fix Signed-off-by: Lev Nachmanson <levnach@hotmail.com> restore hnf_cutter to work with m_row_count <= m_column_count Signed-off-by: Lev Nachmanson <levnach@hotmail.com> tune addition of rational numbers (#70) * log quantifiers only if present Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * merge and fix some warnings Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * set new arith as default for LIA Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * local Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * virtual method in bound propagator Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * prepare for mixed integer-real Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fix default tactic usage Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> give shorter explanations, call hnf only when have a not integral var Signed-off-by: Lev Nachmanson <levnach@hotmail.com> overhaul of mpq (#71) * log quantifiers only if present Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * merge and fix some warnings Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * set new arith as default for LIA Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * local Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * virtual method in bound propagator Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * prepare for mixed integer-real Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fix default tactic usage Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * overhaul of mpz/mpq Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * disabled temporary setting Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * remove prints Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> fix for 32 bit build (#72) * log quantifiers only if present Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * merge and fix some warnings Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * set new arith as default for LIA Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * local Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * virtual method in bound propagator Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * prepare for mixed integer-real Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fix default tactic usage Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * overhaul of mpz/mpq Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * disabled temporary setting Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * remove prints Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * customize for 64 bit Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> yes (#74) * log quantifiers only if present Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * merge and fix some warnings Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * set new arith as default for LIA Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * local Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * virtual method in bound propagator Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * prepare for mixed integer-real Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fix default tactic usage Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * overhaul of mpz/mpq Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * disabled temporary setting Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * remove prints Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * customize for 64 bit Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * customize for 64 bit Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * more refactor Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> fix the merge Signed-off-by: Lev Nachmanson <levnach@hotmail.com> fixes in maximize_term untested Signed-off-by: Lev Nachmanson <levnach@hotmail.com> fix compilation (#75) * log quantifiers only if present Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * merge and fix some warnings Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * set new arith as default for LIA Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * local Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * virtual method in bound propagator Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * prepare for mixed integer-real Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fix default tactic usage Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * overhaul of mpz/mpq Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * disabled temporary setting Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * remove prints Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * customize for 64 bit Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * customize for 64 bit Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * more refactor Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * merge Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * relax check Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * change for gcc Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * merge Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
9be49ff6ff
commit
9ba4026bc6
41 changed files with 942 additions and 1280 deletions
|
@ -74,27 +74,7 @@ class mpq_manager : public mpz_manager<SYNCH> {
|
|||
}
|
||||
}
|
||||
|
||||
void rat_add(mpq const & a, mpq const & b, mpq & c) {
|
||||
STRACE("rat_mpq", tout << "[mpq] " << to_string(a) << " + " << to_string(b) << " == ";);
|
||||
if (SYNCH) {
|
||||
mpz tmp1, tmp2;
|
||||
mul(a.m_num, b.m_den, tmp1);
|
||||
mul(b.m_num, a.m_den, tmp2);
|
||||
mul(a.m_den, b.m_den, c.m_den);
|
||||
add(tmp1, tmp2, c.m_num);
|
||||
normalize(c);
|
||||
del(tmp1);
|
||||
del(tmp2);
|
||||
}
|
||||
else {
|
||||
mul(a.m_num, b.m_den, m_add_tmp1);
|
||||
mul(b.m_num, a.m_den, m_add_tmp2);
|
||||
mul(a.m_den, b.m_den, c.m_den);
|
||||
add(m_add_tmp1, m_add_tmp2, c.m_num);
|
||||
normalize(c);
|
||||
}
|
||||
STRACE("rat_mpq", tout << to_string(c) << "\n";);
|
||||
}
|
||||
void rat_add(mpq const & a, mpq const & b, mpq & c);
|
||||
|
||||
void rat_add(mpq const & a, mpz const & b, mpq & c) {
|
||||
STRACE("rat_mpq", tout << "[mpq] " << to_string(a) << " + " << to_string(b) << " == ";);
|
||||
|
@ -115,46 +95,19 @@ class mpq_manager : public mpz_manager<SYNCH> {
|
|||
STRACE("rat_mpq", tout << to_string(c) << "\n";);
|
||||
}
|
||||
|
||||
void rat_sub(mpq const & a, mpq const & b, mpq & c) {
|
||||
STRACE("rat_mpq", tout << "[mpq] " << to_string(a) << " - " << to_string(b) << " == ";);
|
||||
if (SYNCH) {
|
||||
mpz tmp1, tmp2;
|
||||
mul(a.m_num, b.m_den, tmp1);
|
||||
mul(b.m_num, a.m_den, tmp2);
|
||||
mul(a.m_den, b.m_den, c.m_den);
|
||||
sub(tmp1, tmp2, c.m_num);
|
||||
normalize(c);
|
||||
del(tmp1);
|
||||
del(tmp2);
|
||||
}
|
||||
else {
|
||||
mul(a.m_num, b.m_den, m_add_tmp1);
|
||||
mul(b.m_num, a.m_den, m_add_tmp2);
|
||||
mul(a.m_den, b.m_den, c.m_den);
|
||||
sub(m_add_tmp1, m_add_tmp2, c.m_num);
|
||||
normalize(c);
|
||||
}
|
||||
STRACE("rat_mpq", tout << to_string(c) << "\n";);
|
||||
}
|
||||
void rat_sub(mpq const & a, mpq const & b, mpq & c);
|
||||
|
||||
void rat_mul(mpq const & a, mpq const & b, mpq & c) {
|
||||
STRACE("rat_mpq", tout << "[mpq] " << to_string(a) << " * " << to_string(b) << " == ";);
|
||||
mul(a.m_num, b.m_num, c.m_num);
|
||||
mul(a.m_den, b.m_den, c.m_den);
|
||||
normalize(c);
|
||||
STRACE("rat_mpq", tout << to_string(c) << "\n";);
|
||||
}
|
||||
void rat_mul(mpq const & a, mpq const & b, mpq & c);
|
||||
|
||||
void rat_mul(mpz const & a, mpq const & b, mpq & c) {
|
||||
STRACE("rat_mpq", tout << "[mpq] " << to_string(a) << " * " << to_string(b) << " == ";);
|
||||
mul(a, b.m_num, c.m_num);
|
||||
set(c.m_den, b.m_den);
|
||||
normalize(c);
|
||||
STRACE("rat_mpq", tout << to_string(c) << "\n";);
|
||||
}
|
||||
void rat_mul(mpz const & a, mpq const & b, mpq & c);
|
||||
|
||||
bool rat_lt(mpq const & a, mpq const & b);
|
||||
|
||||
template<bool SUB>
|
||||
void lin_arith_op(mpq const& a, mpq const& b, mpq& c, mpz& g, mpz& tmp1, mpz& tmp2, mpz& tmp3);
|
||||
|
||||
void rat_mul(mpq const & a, mpq const & b, mpq & c, mpz& g1, mpz& g2, mpz& tmp1, mpz& tmp2);
|
||||
|
||||
public:
|
||||
typedef mpq numeral;
|
||||
typedef mpq rational;
|
||||
|
@ -746,10 +699,12 @@ public:
|
|||
reset_denominator(a);
|
||||
}
|
||||
|
||||
void set(mpz & a, unsigned sz, digit_t const * digits) { mpz_manager<SYNCH>::set(a, sz, digits); }
|
||||
void set(mpz & a, unsigned sz, digit_t const * digits) {
|
||||
mpz_manager<SYNCH>::set_digits(a, sz, digits);
|
||||
}
|
||||
|
||||
void set(mpq & a, unsigned sz, digit_t const * digits) {
|
||||
mpz_manager<SYNCH>::set(a.m_num, sz, digits);
|
||||
mpz_manager<SYNCH>::set_digits(a.m_num, sz, digits);
|
||||
reset_denominator(a);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue