mirror of
https://github.com/Z3Prover/z3
synced 2025-06-07 06:33:23 +00:00
ground lemmas during propagation when qlemmas are disabled
When asserting quantified lemmas are disabled, ground a lemma explicitly during propagate to make sure that it is ground using our local set of skolem constants.
This commit is contained in:
parent
5da0753269
commit
9f0eb367b1
2 changed files with 15 additions and 15 deletions
|
@ -769,7 +769,7 @@ bool pred_transformer::is_invariant(unsigned level, expr* lemma,
|
||||||
expr_ref_vector conj(m), aux(m);
|
expr_ref_vector conj(m), aux(m);
|
||||||
expr_ref glemma(m);
|
expr_ref glemma(m);
|
||||||
|
|
||||||
if (false && is_quantifier(lemma)) {
|
if (!get_context().use_qlemmas() && is_quantifier(lemma)) {
|
||||||
SASSERT(is_forall(lemma));
|
SASSERT(is_forall(lemma));
|
||||||
app_ref_vector tmp(m);
|
app_ref_vector tmp(m);
|
||||||
ground_expr(to_quantifier(lemma)->get_expr (), glemma, tmp);
|
ground_expr(to_quantifier(lemma)->get_expr (), glemma, tmp);
|
||||||
|
|
|
@ -1166,21 +1166,21 @@ void mk_epp::rw(expr *e, expr_ref &out)
|
||||||
arw(e, out);
|
arw(e, out);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ground_expr (expr *e, expr_ref &out, app_ref_vector &vars)
|
void ground_expr(expr *e, expr_ref &out, app_ref_vector &vars) {
|
||||||
{
|
|
||||||
expr_free_vars fv;
|
expr_free_vars fv;
|
||||||
ast_manager &m = out.get_manager();
|
ast_manager &m = out.get_manager();
|
||||||
|
|
||||||
fv(e);
|
fv(e);
|
||||||
if (vars.size () < fv.size ())
|
if (vars.size() < fv.size()) {
|
||||||
{ vars.resize(fv.size()); }
|
vars.resize(fv.size());
|
||||||
for (unsigned i = 0, sz = fv.size (); i < sz; ++i) {
|
|
||||||
SASSERT (fv[i]);
|
|
||||||
std::string str = "zk!" + datalog::to_string(sz - 1 - i);
|
|
||||||
vars [i] = m.mk_const (symbol(str.c_str()), fv [i]);
|
|
||||||
}
|
}
|
||||||
var_subst vs(m);
|
for (unsigned i = 0, sz = fv.size(); i < sz; ++i) {
|
||||||
|
sort *s = fv[i] ? fv[i] : m.mk_bool_sort();
|
||||||
|
vars[i] = mk_zk_const(m, i, s);
|
||||||
|
var_subst vs(m, false);
|
||||||
vs(e, vars.size(), (expr * *) vars.c_ptr(), out);
|
vs(e, vars.size(), (expr * *) vars.c_ptr(), out);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
struct index_term_finder {
|
struct index_term_finder {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue