3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-15 13:28:47 +00:00

bypass stale rules as part of unbounded compression. Issue #624

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2016-05-27 10:31:28 -07:00
parent 18a9b89e30
commit 236f1c2a3e

View file

@ -253,8 +253,7 @@ namespace datalog {
m_modified = true;
}
void mk_unbound_compressor::replace_by_decompression_rule(rule_set const& source, unsigned rule_index, unsigned tail_index, unsigned arg_index)
{
void mk_unbound_compressor::replace_by_decompression_rule(rule_set const& source, unsigned rule_index, unsigned tail_index, unsigned arg_index) {
rule * r = m_rules.get(rule_index);
rule_ref new_rule(m_context.get_rule_manager());
mk_decompression_rule(r, tail_index, arg_index, new_rule);
@ -274,11 +273,6 @@ namespace datalog {
unsigned utail_len = r->get_uninterpreted_tail_size();
unsigned tail_index = 0;
#if 0
if (utail_len == 1 && r->is_neg_tail(0)) {
tail_index = utail_len;
}
#endif
while (tail_index < utail_len) {
app * t = r->get_tail(tail_index);
func_decl * t_pred = t->get_decl();
@ -297,6 +291,7 @@ namespace datalog {
unsigned arg_index = compressed_tail_pred_arg_indexes.back();
compressed_tail_pred_arg_indexes.pop_back();
SASSERT(m_in_progress.contains(c_info(t_pred, arg_index)));
bool can_remove_orig_rule =
compressed_tail_pred_arg_indexes.empty() &&
!m_non_empty_rels.contains(t_pred) &&
@ -306,8 +301,10 @@ namespace datalog {
replace_original_rule = true;
replace_by_decompression_rule(source, rule_index, tail_index, arg_index);
// NB. compressed_tail_pred_arg_indexes becomes stale after original rule is replaced.
if (is_negated_predicate && !can_remove_orig_rule) {
break;
}
}
else {
add_decompression_rule(source, r, tail_index, arg_index);
}