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

fix #1510 by reintroducing automatic declaration of recognizers

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2018-03-02 23:02:20 +09:00
parent a738f5af12
commit 8e09a78c26
11 changed files with 35 additions and 40 deletions

View file

@ -261,7 +261,7 @@ namespace qe {
return false;
}
func_decl* c = a->get_decl();
func_decl* r = m_util.get_constructor_recognizer(c);
func_decl_ref r(m_util.get_constructor_is(c), m);
ptr_vector<func_decl> const & acc = *m_util.get_constructor_accessors(c);
SASSERT(acc.size() == a->get_num_args());
//
@ -380,7 +380,7 @@ namespace qe {
}
func_decl* c = l->get_decl();
ptr_vector<func_decl> const& acc = *m_util.get_constructor_accessors(c);
func_decl* rec = m_util.get_constructor_recognizer(c);
func_decl* rec = m_util.get_constructor_is(c);
expr_ref_vector conj(m);
conj.push_back(m.mk_app(rec, r));
for (unsigned i = 0; i < acc.size(); ++i) {
@ -627,7 +627,7 @@ namespace qe {
//
if (!has_recognizer(x, fml, r, c)) {
c = m_datatype_util.get_datatype_constructors(s)->get(vl.get_unsigned());
r = m_datatype_util.get_constructor_recognizer(c);
r = m_datatype_util.get_constructor_is(c);
app* is_c = m.mk_app(r, x);
// assert v => r(x)
m_ctx.add_constraint(true, is_c);
@ -674,7 +674,7 @@ namespace qe {
//
if (!has_recognizer(x, fml, r, c)) {
c = m_datatype_util.get_datatype_constructors(s)->get(vl.get_unsigned());
r = m_datatype_util.get_constructor_recognizer(c);
r = m_datatype_util.get_constructor_is(c);
app* is_c = m.mk_app(r, x);
fml = m.mk_and(is_c, fml);
app_ref fresh_x(m.mk_fresh_const("x", s), m);
@ -775,7 +775,7 @@ namespace qe {
}
c = m_datatype_util.get_datatype_constructors(s)->get(vl.get_unsigned());
r = m_datatype_util.get_constructor_recognizer(c);
r = m_datatype_util.get_constructor_is(c);
app* is_c = m.mk_app(r, x);
// assert v => r(x)

View file

@ -151,7 +151,7 @@ namespace qe {
return false;
}
func_decl* c = a->get_decl();
func_decl* rec = dt.get_constructor_recognizer(c);
func_decl_ref rec(dt.get_constructor_is(c), m);
ptr_vector<func_decl> const & acc = *dt.get_constructor_accessors(c);
SASSERT(acc.size() == a->get_num_args());
//
@ -232,7 +232,7 @@ namespace qe {
func_decl* c = to_app(l)->get_decl();
ptr_vector<func_decl> const& acc = *dt.get_constructor_accessors(c);
if (!is_app_of(r, c)) {
lits.push_back(m.mk_app(dt.get_constructor_recognizer(c), r));
lits.push_back(m.mk_app(dt.get_constructor_is(c), r));
}
for (unsigned i = 0; i < acc.size(); ++i) {
lits.push_back(m.mk_eq(to_app(l)->get_arg(i), access(c, i, acc, r)));

View file

@ -692,7 +692,7 @@ namespace eq {
}
}
else {
func_decl* rec = dt.get_constructor_recognizer(d);
func_decl* rec = dt.get_constructor_is(d);
conjs.push_back(m.mk_app(rec, r));
ptr_vector<func_decl> const& acc = *dt.get_constructor_accessors(d);
for (unsigned i = 0; i < acc.size(); ++i) {