mirror of
https://github.com/Z3Prover/z3
synced 2025-04-13 12:28:44 +00:00
This commit overhauls the proof format (in development) for the new core. NOTE: this functionality is work in progress with a long way to go. It is shielded by the sat.euf option, which is off by default and in pre-release state. It is too early to fuzz or use it. It is pushed into master to shed light on road-map for certifying inferences of sat.euf. It retires the ad-hoc extension of DRUP used by the SAT solver. Instead it relies on SMT with ad-hoc extensions for proof terms. It adds the following commands (consumed by proof_cmds.cpp): - assume - for input clauses - learn - when a clause is learned (or redundant clause is added) - del - when a clause is deleted. The commands take a list of expressions of type Bool and the last argument can optionally be of type Proof. When the last argument is of type Proof it is provided as a hint to justify the learned clause. Proof hints can be checked using a self-contained proof checker. The sat/smt/euf_proof_checker.h class provides a plugin dispatcher for checkers. It is instantiated with a checker for arithmetic lemmas, so far for Farkas proofs. Use example: ``` (set-option :sat.euf true) (set-option :tactic.default_tactic smt) (set-option :sat.smt.proof f.proof) (declare-const x Int) (declare-const y Int) (declare-const z Int) (declare-const u Int) (assert (< x y)) (assert (< y z)) (assert (< z x)) (check-sat) ``` Run z3 on a file with above content. Then run z3 on f.proof ``` (verified-smt) (verified-smt) (verified-smt) (verified-farkas) (verified-smt) ```
54 lines
997 B
C++
54 lines
997 B
C++
/*++
|
|
Copyright (c) 2013 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
scoped_proof.h
|
|
|
|
Abstract:
|
|
|
|
Scoped proof environments. Toggles enabling proofs.
|
|
|
|
Author:
|
|
|
|
Nikolaj Bjorner (nbjorner) 2013-08-28
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
#pragma once
|
|
|
|
#include "ast/ast.h"
|
|
|
|
class scoped_proof_mode {
|
|
ast_manager& m;
|
|
proof_gen_mode m_mode;
|
|
public:
|
|
scoped_proof_mode(ast_manager& m, proof_gen_mode mode): m(m) {
|
|
m_mode = m.proof_mode();
|
|
m.toggle_proof_mode(mode);
|
|
}
|
|
~scoped_proof_mode() {
|
|
m.toggle_proof_mode(m_mode);
|
|
}
|
|
|
|
};
|
|
|
|
class scoped_proof : public scoped_proof_mode {
|
|
public:
|
|
scoped_proof(ast_manager& m): scoped_proof_mode(m, PGM_ENABLED) {}
|
|
};
|
|
|
|
class scoped_no_proof : public scoped_proof_mode {
|
|
public:
|
|
scoped_no_proof(ast_manager& m): scoped_proof_mode(m, PGM_DISABLED) {}
|
|
};
|
|
|
|
class scoped_restore_proof : public scoped_proof_mode {
|
|
public:
|
|
scoped_restore_proof(ast_manager& m): scoped_proof_mode(m, m.proof_mode()) {}
|
|
};
|
|
|
|
|
|
|