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

adding q proof hints

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2022-10-07 19:21:12 +02:00
parent 661a1624b4
commit 35639c5ac0
8 changed files with 71 additions and 50 deletions

View file

@ -21,6 +21,7 @@ Author:
#include "ast/ast_ll_pp.h"
#include "sat/smt/euf_proof_checker.h"
#include "sat/smt/arith_proof_checker.h"
#include "sat/smt/q_proof_checker.h"
#include <iostream>
namespace euf {
@ -240,7 +241,7 @@ namespace euf {
return false;
return pc.check(proof1) && pc.check(proof2);
}
expr_ref_vector clause(app* jst) override {
expr_ref_vector result(m);
auto x = jst->args3();
@ -272,6 +273,7 @@ namespace euf {
add_plugin(alloc(arith::proof_checker, m));
add_plugin(alloc(eq_proof_checker, m));
add_plugin(alloc(res_proof_checker, m, *this));
add_plugin(alloc(q::proof_checker, m));
}
proof_checker::~proof_checker() {
@ -290,8 +292,7 @@ namespace euf {
bool proof_checker::check(expr* e) {
if (m_checked_clauses.contains(e))
return true;
return true;
if (!e || !is_app(e))
return false;
app* a = to_app(e);
@ -309,12 +310,17 @@ namespace euf {
expr_ref_vector* rr;
if (m_checked_clauses.find(e, rr))
return *rr;
SASSERT(is_app(e) && m_map.contains(to_app(e)->get_decl()->get_name()));
expr_ref_vector r = m_map[to_app(e)->get_decl()->get_name()]->clause(to_app(e));
SASSERT(is_app(e) && m_map.contains(to_app(e)->get_name()));
expr_ref_vector r = m_map[to_app(e)->get_name()]->clause(to_app(e));
m_checked_clauses.insert(e, alloc(expr_ref_vector, r));
return r;
}
void proof_checker::vc(expr* e, expr_ref_vector& clause) {
SASSERT(is_app(e) && m_map.contains(to_app(e)->get_name()));
m_map[to_app(e)->get_name()]->vc(to_app(e), clause);
}
bool proof_checker::check(expr_ref_vector const& clause1, expr* e, expr_ref_vector & units) {
if (!check(e))
return false;