3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-09-06 01:48:02 +00:00

Do a quick check for feasibility w.r.t. bits before using forbidden intervals

This commit is contained in:
Clemens Eisenhofer 2023-02-15 20:06:13 +01:00
parent e07c77e072
commit 5ddc727f91
6 changed files with 439 additions and 6 deletions

View file

@ -17,6 +17,18 @@ Author:
namespace polysat {
class solver;
struct trailing_bits {
unsigned length;
rational bits;
bool positive;
unsigned src_idx;
};
struct single_bit {
bool positive;
unsigned position;
unsigned src_idx;
};
class simplify_clause {
@ -33,6 +45,7 @@ namespace polysat {
bool try_remove_equations(clause& cl);
bool try_recognize_bailout(clause& cl);
bool try_equal_body_subsumptions(clause& cl);
bool try_bit_subsumptions(clause& cl);
void prepare_subs_entry(subs_entry& entry, signed_constraint c);
@ -46,6 +59,9 @@ namespace polysat {
simplify_clause(solver& s);
bool apply(clause& cl);
static bool get_trailing_mask(pdd lhs, pdd rhs, pdd& p, trailing_bits& mask, bool pos);
static bool get_bit(const pdd& lhs, const pdd& rhs, pdd& p, single_bit& bit, bool pos);
};
}