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

move to get_sort as method, add opt_lns pass, disable xor simplification unless configured, fix perf bug in model converter update trail

This commit is contained in:
Nikolaj Bjorner 2021-02-02 03:58:19 -08:00
parent c623e2db28
commit 4455f6caf8
36 changed files with 391 additions and 90 deletions

View file

@ -41,7 +41,7 @@ class dt2bv_tactic : public tactic {
obj_hashtable<sort> m_non_fd_sorts;
bool is_fd(expr* a) { return is_fd(get_sort(a)); }
bool is_fd(expr* a) { return is_fd(a->get_sort()); }
bool is_fd(sort* a) { return m_dt.is_enum_sort(a); }
struct check_fd {
@ -59,14 +59,14 @@ class dt2bv_tactic : public tactic {
}
else if (m_t.m_dt.is_recognizer(a->get_decl()) &&
m_t.is_fd(a->get_arg(0))) {
m_t.m_fd_sorts.insert(get_sort(a->get_arg(0)));
m_t.m_fd_sorts.insert(a->get_arg(0)->get_sort());
}
else if (m_t.is_fd(a) && a->get_num_args() > 0) {
m_t.m_non_fd_sorts.insert(get_sort(a));
m_t.m_non_fd_sorts.insert(a->get_sort());
args_cannot_be_fd(a);
}
else if (m_t.is_fd(a)) {
m_t.m_fd_sorts.insert(get_sort(a));
m_t.m_fd_sorts.insert(a->get_sort());
}
else {
args_cannot_be_fd(a);
@ -76,14 +76,14 @@ class dt2bv_tactic : public tactic {
void args_cannot_be_fd(app* a) {
for (expr* arg : *a) {
if (m_t.is_fd(arg)) {
m_t.m_non_fd_sorts.insert(get_sort(arg));
m_t.m_non_fd_sorts.insert(arg->get_sort());
}
}
}
void operator()(var * v) {
if (m_t.is_fd(v)) {
m_t.m_fd_sorts.insert(get_sort(v));
m_t.m_fd_sorts.insert(v->get_sort());
}
}

View file

@ -242,7 +242,7 @@ private:
if (mc) {
ensure_mc(mc);
expr_ref num(m_bv.mk_numeral(mdl, get_sort(fst_arg)), m);
expr_ref num(m_bv.mk_numeral(mdl, fst_arg->get_sort()), m);
for (unsigned i = 1, n = a->get_num_args(); i != n; ++i) {
(*mc)->add(a->get_arg(i), num);
}

View file

@ -48,7 +48,7 @@ struct is_non_fp_qfnra_predicate {
if (fid != null_family_id && fid != fu.get_family_id())
throw found();
sort * s = get_sort(n);
sort * s = n->get_sort();
if (fid == fu.get_family_id()) {
if (!fu.is_float(s) && !fu.is_rm(s) &&
to_app(n)->get_decl_kind() != OP_FPA_TO_REAL)
@ -123,7 +123,7 @@ struct is_non_qffp_predicate {
void operator()(quantifier *) { throw found(); }
void operator()(app * n) {
sort * s = get_sort(n);
sort * s = n->get_sort();
if (!m.is_bool(s) && !fu.is_float(s) && !fu.is_rm(s) && !bu.is_bv_sort(s) && !au.is_real(s))
throw found();
family_id fid = n->get_family_id();

View file

@ -57,7 +57,7 @@ struct is_non_qffplra_predicate {
void operator()(quantifier *) { throw found(); }
void operator()(app * n) {
sort * s = get_sort(n);
sort * s = n->get_sort();
if (!m.is_bool(s) && !fu.is_float(s) && !fu.is_rm(s) && !bu.is_bv_sort(s) && !au.is_real(s))
throw found();
family_id fid = n->get_family_id();

View file

@ -18,6 +18,7 @@ Notes:
--*/
#include "ast/ast_pp.h"
#include "ast/ast_ll_pp.h"
#include "ast/for_each_expr.h"
#include "ast/ast_util.h"
#include "ast/occurs.h"
@ -31,6 +32,7 @@ Notes:
generic_model_converter::~generic_model_converter() {
}
void generic_model_converter::add(func_decl * d, expr* e) {
VERIFY(e);
VERIFY(d->get_range() == m.get_sort(e));