mirror of
https://github.com/Z3Prover/z3
synced 2025-04-25 10:05:32 +00:00
integrate lambda expressions
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
bf4edef761
commit
520ce9a5ee
139 changed files with 2243 additions and 1506 deletions
|
@ -346,7 +346,7 @@ bool proof_checker::check1_basic(proof* p, expr_ref_vector& side_conditions) {
|
|||
to_quantifier(t1.get())->get_expr() == s1.get() &&
|
||||
to_quantifier(t2.get())->get_expr() == s2.get() &&
|
||||
to_quantifier(t1.get())->get_num_decls() == to_quantifier(t2.get())->get_num_decls() &&
|
||||
to_quantifier(t1.get())->is_forall() == to_quantifier(t2.get())->is_forall()) {
|
||||
to_quantifier(t1.get())->get_kind() == to_quantifier(t2.get())->get_kind()) {
|
||||
quantifier* q1 = to_quantifier(t1.get());
|
||||
quantifier* q2 = to_quantifier(t2.get());
|
||||
for (unsigned i = 0; i < q1->get_num_decls(); ++i) {
|
||||
|
@ -734,9 +734,10 @@ bool proof_checker::check1_basic(proof* p, expr_ref_vector& side_conditions) {
|
|||
is_forall = true;
|
||||
}
|
||||
if (is_quantifier(e)) {
|
||||
q = to_quantifier(e);
|
||||
SASSERT(!is_lambda(e));
|
||||
q = to_quantifier(e);
|
||||
// TBD check that quantifier is properly instantiated
|
||||
return is_forall == q->is_forall();
|
||||
return is_forall == ::is_forall(q);
|
||||
}
|
||||
}
|
||||
UNREACHABLE();
|
||||
|
@ -784,7 +785,7 @@ bool proof_checker::check1_basic(proof* p, expr_ref_vector& side_conditions) {
|
|||
// SASSERT(to_quantifier(premise)->get_num_decls() == sub.size());
|
||||
premise = to_quantifier(premise)->get_expr();
|
||||
}
|
||||
vs(premise, sub.size(), sub.c_ptr(), premise);
|
||||
premise = vs(premise, sub.size(), sub.c_ptr());
|
||||
}
|
||||
fmls.push_back(premise.get());
|
||||
TRACE("proof_checker",
|
||||
|
@ -974,7 +975,7 @@ bool proof_checker::match_app(expr const* e, func_decl_ref& d, expr_ref_vector&
|
|||
bool proof_checker::match_quantifier(expr const* e, bool& is_univ, sort_ref_vector& sorts, expr_ref& body) const {
|
||||
if (is_quantifier(e)) {
|
||||
quantifier const* q = to_quantifier(e);
|
||||
is_univ = q->is_forall();
|
||||
is_univ = is_forall(q);
|
||||
body = q->get_expr();
|
||||
for (unsigned i = 0; i < q->get_num_decls(); ++i) {
|
||||
sorts.push_back(q->get_decl_sort(i));
|
||||
|
|
|
@ -975,9 +975,7 @@ private:
|
|||
|
||||
void compose(expr_ref_vector& sub, expr_ref_vector const& s0) {
|
||||
for (unsigned i = 0; i < sub.size(); ++i) {
|
||||
expr_ref e(m);
|
||||
var_subst(m, false)(sub[i].get(), s0.size(), s0.c_ptr(), e);
|
||||
sub[i] = e;
|
||||
sub[i] = var_subst(m, false)(sub[i].get(), s0.size(), s0.c_ptr());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -995,7 +993,7 @@ private:
|
|||
tout << sub.size() << "\n";);
|
||||
return;
|
||||
}
|
||||
var_subst(m, false)(q->get_expr(), sub.size(), sub.c_ptr(), fml);
|
||||
fml = var_subst(m, false)(q->get_expr(), sub.size(), sub.c_ptr());
|
||||
}
|
||||
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue