mirror of
https://github.com/Z3Prover/z3
synced 2025-10-17 21:10:26 +00:00
Deal with special case that coefficients are multiples directly (Without calculating the symbolic inverse)
This commit is contained in:
parent
7cb87df00c
commit
0341851958
2 changed files with 149 additions and 75 deletions
|
@ -29,6 +29,9 @@ namespace polysat {
|
|||
unsigned_vector m_inverse_constants;
|
||||
unsigned_vector m_rest_constants;
|
||||
|
||||
unsigned_vector m_occ;
|
||||
unsigned_vector m_occ_cnt;
|
||||
|
||||
pdd get_hamming_distance(pdd p);
|
||||
pdd get_odd(pdd p); // add lemma "2^pv(v) * v' = v"
|
||||
optional<pdd> get_inverse(pdd v); // add lemma "v' * v'^-1 = 1 (where v' is the odd part of v)"
|
||||
|
@ -39,9 +42,10 @@ namespace polysat {
|
|||
void find_lemma(pvar v, signed_constraint c, conflict& core);
|
||||
pdd eval(pdd const& p, conflict& core, assignment_t& out_assignment);
|
||||
bool inv(pdd const& p, pdd& out_p_inv);
|
||||
bool is_multiple(const pdd& p1, const pdd& p2, pdd &out);
|
||||
public:
|
||||
free_variable_elimination(solver& s): s(s) {}
|
||||
void find_lemma(conflict& core);
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue