mirror of
https://github.com/Z3Prover/z3
synced 2025-08-26 21:16:02 +00:00
parent
6d6881c87a
commit
35f184a6b9
11 changed files with 108 additions and 114 deletions
|
@ -115,6 +115,14 @@ namespace datalog {
|
|||
e->get_data().m_value = rel;
|
||||
}
|
||||
|
||||
decl_set relation_manager::collect_predicates() const {
|
||||
decl_set res;
|
||||
for (auto const& kv : m_relations) {
|
||||
res.insert(kv.m_key);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
void relation_manager::collect_non_empty_predicates(decl_set & res) const {
|
||||
for (auto const& kv : m_relations) {
|
||||
if (!kv.m_value->fast_empty()) {
|
||||
|
|
|
@ -115,7 +115,7 @@ namespace datalog {
|
|||
m_next_relation_fid(0) {}
|
||||
|
||||
virtual ~relation_manager();
|
||||
|
||||
|
||||
void reset();
|
||||
void reset_relations();
|
||||
|
||||
|
@ -155,6 +155,7 @@ namespace datalog {
|
|||
}
|
||||
}
|
||||
|
||||
decl_set collect_predicates() const;
|
||||
void collect_non_empty_predicates(decl_set & res) const;
|
||||
void restrict_predicates(const decl_set & preds);
|
||||
|
||||
|
|
|
@ -257,16 +257,6 @@ namespace datalog {
|
|||
is_approx = true;
|
||||
}
|
||||
rel.to_formula(e);
|
||||
#if 0
|
||||
// Alternative format:
|
||||
// List the signature of the relation as
|
||||
// part of the answer.
|
||||
expr_ref_vector args(m);
|
||||
for (unsigned j = 0; j < q->get_arity(); ++j) {
|
||||
args.push_back(m.mk_var(j, q->get_domain(j)));
|
||||
}
|
||||
e = m.mk_implies(m.mk_app(q, args.size(), args.c_ptr()), e);
|
||||
#endif
|
||||
ans.push_back(e);
|
||||
}
|
||||
SASSERT(!m_last_result_relation);
|
||||
|
@ -294,6 +284,19 @@ namespace datalog {
|
|||
return res;
|
||||
}
|
||||
|
||||
model_ref rel_context::get_model() {
|
||||
model_ref md = alloc(model, m);
|
||||
auto& rm = get_rmanager();
|
||||
func_decl_set decls = rm.collect_predicates();
|
||||
expr_ref fml(m);
|
||||
for (func_decl* p : decls) {
|
||||
rm.get_relation(p).to_formula(fml);
|
||||
md->register_decl(p, fml);
|
||||
}
|
||||
(*m_context.get_model_converter())(md);
|
||||
return md;
|
||||
}
|
||||
|
||||
void rel_context::transform_rules() {
|
||||
rule_transformer transf(m_context);
|
||||
transf.register_plugin(alloc(mk_coi_filter, m_context));
|
||||
|
|
|
@ -91,6 +91,8 @@ namespace datalog {
|
|||
|
||||
void transform_rules() override;
|
||||
|
||||
model_ref get_model() override;
|
||||
|
||||
bool try_get_size(func_decl* pred, unsigned& rel_size) const override;
|
||||
/**
|
||||
\brief query result if it contains fact.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue