3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-10 19:27:06 +00:00

spacer: fail with exception on quantifiers in recursive rules

This commit is contained in:
Arie Gurfinkel 2020-04-11 14:16:47 -04:00
parent 1e96570365
commit 1f6815213d

View file

@ -1676,8 +1676,17 @@ void pred_transformer::init_rule(decl2rel const& pts, datalog::rule const& rule)
}
TRACE("spacer_init_rule", tout << mk_pp(trans, m) << "\n";);
// allow quantifiers in init rule
SASSERT(ut_size == 0 || is_ground(trans));
// no (universal) quantifiers in recursive rules
CTRACE("spacer", ut_size > 0 && !is_ground(trans),
tout << "Warning: quantifier in recursive rule: " << trans << "\n";);
if (ut_size > 0 && !is_ground(trans)) {
std::stringstream stm;
stm << "spacer: quantifier in a recursive rule:\n";
rule.display(get_context().get_datalog_context(), tout);
throw default_exception(stm.str());
}
if (!m.is_false(trans)) {
pt_rule &ptr = m_pt_rules.mk_rule(m, rule);
ptr.set_trans(trans);