3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-08 04:01:22 +00:00
This commit is contained in:
Nikolaj Bjorner 2020-11-27 18:00:36 -08:00
parent df09cb7c95
commit 6e14d3fbd3
2 changed files with 35 additions and 18 deletions

View file

@ -125,7 +125,13 @@ namespace smt {
mutable vector<rational> m_power2;
unsigned char m_eq_activity[256];
svector<std::pair<theory_var, theory_var>> m_replay_diseq;
struct bv_diseq {
theory_var v1, v2;
unsigned idx;
bv_diseq(theory_var v1, theory_var v2, unsigned idx):v1(v1), v2(v2), idx(idx) {}
};
svector<bv_diseq> m_prop_diseqs;
unsigned m_prop_diseqs_qhead { 0 };
vector<vector<std::pair<theory_var, theory_var>>> m_diseq_watch;
unsigned char m_diseq_activity[256];
svector<bool_var> m_diseq_watch_trail;
@ -162,7 +168,8 @@ namespace smt {
void get_arg_bits(app * n, unsigned idx, expr_ref_vector & r);
friend class add_var_pos_trail;
void simplify_bit(expr * s, expr_ref & r);
void mk_new_diseq_axiom(theory_var v1, theory_var v2, unsigned idx);
void add_new_diseq_axiom(theory_var v1, theory_var v2, unsigned idx);
void assert_new_diseq_axiom(theory_var v1, theory_var v2, unsigned idx);
friend class register_true_false_bit_trail;
void register_true_false_bit(theory_var v, unsigned idx);
void find_new_diseq_axioms(var_pos_occ * occs, theory_var v, unsigned idx);
@ -240,7 +247,7 @@ namespace smt {
bool include_func_interp(func_decl* f) override;
svector<theory_var> m_merge_aux[2]; //!< auxiliary vector used in merge_zero_one_bits
bool merge_zero_one_bits(theory_var r1, theory_var r2);
bool can_propagate() override { return !m_replay_diseq.empty(); }
bool can_propagate() override { return m_prop_diseqs_qhead < m_prop_diseqs.size(); }
void propagate() override;
// -----------------------------------