mirror of
https://github.com/Z3Prover/z3
synced 2025-04-12 12:08:18 +00:00
encoding options #4665
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
e8826bb20f
commit
dbe2c9b305
|
@ -161,6 +161,7 @@ struct pb2bv_rewriter::imp {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_pb_solver == "segmented") {
|
if (m_pb_solver == "segmented") {
|
||||||
|
throw default_exception("segmented encoding is disabled, use a different value for pb.solver");
|
||||||
switch (is_le) {
|
switch (is_le) {
|
||||||
case l_true: return mk_seg_le(k);
|
case l_true: return mk_seg_le(k);
|
||||||
case l_false: return mk_seg_ge(k);
|
case l_false: return mk_seg_ge(k);
|
||||||
|
@ -565,14 +566,15 @@ struct pb2bv_rewriter::imp {
|
||||||
}
|
}
|
||||||
|
|
||||||
expr_ref mk_seg_le_rec(vector<ptr_vector<expr>> const& outs, vector<rational> const& coeffs, unsigned i, rational const& k) {
|
expr_ref mk_seg_le_rec(vector<ptr_vector<expr>> const& outs, vector<rational> const& coeffs, unsigned i, rational const& k) {
|
||||||
|
if (k.is_neg()) {
|
||||||
|
return expr_ref(m.mk_false(), m);
|
||||||
|
}
|
||||||
|
if (i == outs.size()) {
|
||||||
|
return expr_ref(m.mk_true(), m);
|
||||||
|
}
|
||||||
rational const& c = coeffs[i];
|
rational const& c = coeffs[i];
|
||||||
ptr_vector<expr> const& out = outs[i];
|
ptr_vector<expr> const& out = outs[i];
|
||||||
if (k.is_neg()) {
|
|
||||||
return expr_ref(m.mk_false(), m);
|
|
||||||
}
|
|
||||||
if (i == outs.size()) {
|
|
||||||
return expr_ref(m.mk_true(), m);
|
|
||||||
}
|
|
||||||
if (i + 1 == outs.size() && k >= rational(out.size()-1)*c) {
|
if (i + 1 == outs.size() && k >= rational(out.size()-1)*c) {
|
||||||
return expr_ref(m.mk_true(), m);
|
return expr_ref(m.mk_true(), m);
|
||||||
}
|
}
|
||||||
|
@ -1038,6 +1040,7 @@ struct pb2bv_rewriter::imp {
|
||||||
void collect_param_descrs(param_descrs& r) const {
|
void collect_param_descrs(param_descrs& r) const {
|
||||||
r.insert("keep_cardinality_constraints", CPK_BOOL, "(default: false) retain cardinality constraints (don't bit-blast them) and use built-in cardinality solver");
|
r.insert("keep_cardinality_constraints", CPK_BOOL, "(default: false) retain cardinality constraints (don't bit-blast them) and use built-in cardinality solver");
|
||||||
r.insert("pb.solver", CPK_SYMBOL, "(default: solver) retain pb constraints (don't bit-blast them) and use built-in pb solver");
|
r.insert("pb.solver", CPK_SYMBOL, "(default: solver) retain pb constraints (don't bit-blast them) and use built-in pb solver");
|
||||||
|
r.insert("cardinality.encoding", CPK_SYMBOL, "(default: none) grouped, bimander, ordered, unate, circuit");
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned get_num_steps() const { return m_rw.get_num_steps(); }
|
unsigned get_num_steps() const { return m_rw.get_num_steps(); }
|
||||||
|
|
|
@ -2519,6 +2519,7 @@ void theory_seq::add_dependency(dependency*& dep, enode* a, enode* b) {
|
||||||
|
|
||||||
|
|
||||||
void theory_seq::propagate() {
|
void theory_seq::propagate() {
|
||||||
|
force_push();
|
||||||
if (ctx.get_fparams().m_seq_use_unicode)
|
if (ctx.get_fparams().m_seq_use_unicode)
|
||||||
m_unicode.propagate();
|
m_unicode.propagate();
|
||||||
if (m_regex.can_propagate())
|
if (m_regex.can_propagate())
|
||||||
|
|
|
@ -48,6 +48,8 @@ public:
|
||||||
|
|
||||||
void collect_param_descrs(param_descrs & r) override {
|
void collect_param_descrs(param_descrs & r) override {
|
||||||
r.insert("keep_cardinality_constraints", CPK_BOOL, "(default: true) retain cardinality constraints for solver");
|
r.insert("keep_cardinality_constraints", CPK_BOOL, "(default: true) retain cardinality constraints for solver");
|
||||||
|
pb2bv_rewriter rw(m, m_params);
|
||||||
|
rw.collect_param_descrs(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue