mirror of
https://github.com/Z3Prover/z3
synced 2025-04-29 20:05:51 +00:00
support for smtlib2.6 datatype parsing
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
5492d0e135
commit
5d17e28667
29 changed files with 374 additions and 206 deletions
|
@ -808,7 +808,7 @@ namespace datalog {
|
|||
datatype_util dtu(m);
|
||||
ptr_vector<sort> sorts;
|
||||
func_decl* p = r.get_decl();
|
||||
ptr_vector<func_decl> const& succs = dtu.get_datatype_constructors(m.get_sort(path));
|
||||
ptr_vector<func_decl> const& succs = *dtu.get_datatype_constructors(m.get_sort(path));
|
||||
// populate substitution of bound variables.
|
||||
r.get_vars(m, sorts);
|
||||
sub.reset();
|
||||
|
@ -871,8 +871,8 @@ namespace datalog {
|
|||
path_var = m.mk_var(0, m_path_sort);
|
||||
trace_var = m.mk_var(1, pred_sort);
|
||||
// sort* sorts[2] = { pred_sort, m_path_sort };
|
||||
ptr_vector<func_decl> const& cnstrs = dtu.get_datatype_constructors(pred_sort);
|
||||
ptr_vector<func_decl> const& succs = dtu.get_datatype_constructors(m_path_sort);
|
||||
ptr_vector<func_decl> const& cnstrs = *dtu.get_datatype_constructors(pred_sort);
|
||||
ptr_vector<func_decl> const& succs = *dtu.get_datatype_constructors(m_path_sort);
|
||||
SASSERT(cnstrs.size() == rls.size());
|
||||
pred = m.mk_app(mk_predicate(p), trace_var.get(), path_var.get());
|
||||
for (unsigned i = 0; i < rls.size(); ++i) {
|
||||
|
@ -970,7 +970,7 @@ namespace datalog {
|
|||
_name << pred->get_name() << "_" << q->get_name() << j;
|
||||
symbol name(_name.str().c_str());
|
||||
type_ref tr(idx);
|
||||
accs.push_back(mk_accessor_decl(name, tr));
|
||||
accs.push_back(mk_accessor_decl(m, name, tr));
|
||||
}
|
||||
std::stringstream _name;
|
||||
_name << pred->get_name() << "_" << i;
|
||||
|
@ -979,7 +979,7 @@ namespace datalog {
|
|||
symbol is_name(_name.str().c_str());
|
||||
cnstrs.push_back(mk_constructor_decl(name, is_name, accs.size(), accs.c_ptr()));
|
||||
}
|
||||
dts.push_back(mk_datatype_decl(dtu, pred->get_name(), cnstrs.size(), cnstrs.c_ptr()));
|
||||
dts.push_back(mk_datatype_decl(dtu, pred->get_name(), 0, nullptr, cnstrs.size(), cnstrs.c_ptr()));
|
||||
}
|
||||
|
||||
|
||||
|
@ -1024,10 +1024,10 @@ namespace datalog {
|
|||
_name2 << "get_succ#" << i;
|
||||
ptr_vector<accessor_decl> accs;
|
||||
type_ref tr(0);
|
||||
accs.push_back(mk_accessor_decl(name, tr));
|
||||
accs.push_back(mk_accessor_decl(m, name, tr));
|
||||
cnstrs.push_back(mk_constructor_decl(name, is_name, accs.size(), accs.c_ptr()));
|
||||
}
|
||||
dts.push_back(mk_datatype_decl(dtu, symbol("Path"), cnstrs.size(), cnstrs.c_ptr()));
|
||||
dts.push_back(mk_datatype_decl(dtu, symbol("Path"), 0, nullptr, cnstrs.size(), cnstrs.c_ptr()));
|
||||
VERIFY (dtp->mk_datatypes(dts.size(), dts.c_ptr(), 0, 0, new_sorts));
|
||||
m_path_sort = new_sorts[0].get();
|
||||
}
|
||||
|
@ -1039,8 +1039,8 @@ namespace datalog {
|
|||
sort* trace_sort = m.get_sort(trace);
|
||||
func_decl* p = m_sort2pred.find(trace_sort);
|
||||
datalog::rule_vector const& rules = b.m_rules.get_predicate_rules(p);
|
||||
ptr_vector<func_decl> const& cnstrs = dtu.get_datatype_constructors(trace_sort);
|
||||
ptr_vector<func_decl> const& succs = dtu.get_datatype_constructors(m_path_sort);
|
||||
ptr_vector<func_decl> const& cnstrs = *dtu.get_datatype_constructors(trace_sort);
|
||||
ptr_vector<func_decl> const& succs = *dtu.get_datatype_constructors(m_path_sort);
|
||||
for (unsigned i = 0; i < cnstrs.size(); ++i) {
|
||||
if (trace->get_decl() == cnstrs[i]) {
|
||||
svector<std::pair<unsigned, unsigned> > positions;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue