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:
parent
a738f5af12
commit
8e09a78c26
11 changed files with 35 additions and 40 deletions
|
@ -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)
|
||||
|
|
|
@ -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)));
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue