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

start make_asserting for non-unit coeff

This commit is contained in:
Jakob Rath 2022-08-19 17:06:28 +02:00
parent ee208efdc5
commit 3e99828c3c
4 changed files with 66 additions and 2 deletions

View file

@ -136,6 +136,14 @@ namespace polysat {
add(m.mk_eq(bv->mk_bv_not(mk_poly(in)), mk_poly(out)), sign, dep);
}
void add_ule_const(rational const& val, bool sign, dep_t dep) override {
add(bv->mk_ule(x, mk_numeral(val)), sign, dep);
}
void add_uge_const(rational const& val, bool sign, dep_t dep) override {
add(bv->mk_ule(mk_numeral(val), x), sign, dep);
}
lbool check() override {
return s->check_sat();
}

View file

@ -56,6 +56,16 @@ namespace polysat {
virtual void add_xor(univariate const& in1, univariate const& in2, univariate const& out, bool sign, dep_t dep) = 0;
virtual void add_not(univariate const& in, univariate const& out, bool sign, dep_t dep) = 0;
/// Add x <= val or x > val, depending on sign
virtual void add_ule_const(rational const& val, bool sign, dep_t dep) = 0;
/// Add x >= val or x < val, depending on sign
virtual void add_uge_const(rational const& val, bool sign, dep_t dep) = 0;
void add_ugt_const(rational const& val, bool sign, dep_t dep) { add_ule_const(val, !sign, dep); }
void add_ult_const(rational const& val, bool sign, dep_t dep) { add_uge_const(val, !sign, dep); }
// TODO: assert bit; use bv->mk_bit2bool(x, idx)
// virtual void add_bit(unsigned idx, bool sign, dep_t dep);
virtual std::ostream& display(std::ostream& out) const = 0;
};