Question: Proof Checking in Z3 - state of the art #5000
Replies: 7 comments
-
Hi, you may refer to this issue: #4226 |
Beta Was this translation helpful? Give feedback.
-
Thanks! Yeah, this is very related. I wonder if something has changed since then? |
Beta Was this translation helpful? Give feedback.
-
Overall, I would say that an approach that has a better chance of surviving internal changes is to have the proof checker replay proofs based on hints. Clausal proofs provide a very reasonable interface level (though, they don't consider pre-processing, so one has to recover justifications from pre-processing using sequence of rewrite steps that the normal proof objects provide). |
Beta Was this translation helpful? Give feedback.
-
Thank you for the thorough response! I feel this has to be saved permanently somewhere for future generation researchers :-) |
Beta Was this translation helpful? Give feedback.
-
This is indeed a topic better suited for a discussion forum and I would have put it under a "GitHub discussion" tab if it were already available. It seems still not yet available in beta. So for now, the issue list. The question is also timely because I am in the process of augmenting Z3's SAT core with theories and then migrating piecemeal SMT services to it. The time seems ripe to take the learnings from the core we have used through many years and integrate newer advances from SAT solving and inprocessing. The SAT solver already handles Pseudo-Booleans and cardinality constraints through theory propagation and options for resolution and in-processing, but it may as well also be augmented with other theory reasoning. As of last week, the current state is to handle simple EUF reasoning and the plan is to allow it to handle a base level of bit-vector reasoning next. I would therefore like to put the correctness and diagnosability of this solver on some firmer ground. For the new core I would like to augment the DRAT format with SMT information. A portable format should have wider benefits because independent checkers can consume it and maybe even work across front-ends. DRAT has already been established to be portable, but with the benefit of serving a very confined calculus. SMT is open ended. There are some exciting new developments on extending DRAT to polynomial rings, PR proofs, etc. These would still serve a Boolean domain and for SMT a way to integrate both efficient certification of the Boolean domain and extensibility seems in place. For EUF I currently generate the following output:
The format is preliminary, but a start for EUF and an indicator of the main extensions
For DRAT there have been checkers developed in C, ACL2, Isabelle and Coq. With the runtime advances and already established solving in Lean, I suspect it would be a very appealing platform for the extension of DRAT. A checker, Several benefits from independent checker for DRAT should carry over:
The format is also set up to subsume the way we trace proofs in the TRACE option. The axiom profiler tools were |
Beta Was this translation helpful? Give feedback.
-
Correct, QF_BV and QF_UFBV and QF_ABV are important theories to support well with a good SAT solver. |
Beta Was this translation helpful? Give feedback.
-
An introduction to proof log interaction is now available here https://microsoft.github.io/z3guide/programming/Proof%20Logs/ |
Beta Was this translation helpful? Give feedback.
-
Hello, Mr. Bjørner!
I would like to be able to re-check proof objects produced by Z3 proof generation facility (for UNSAT)
What options do I have? I see some proof-checking facility is available in Z3 source code:
./z3/src/ast/proofs/proof_checker.* , but not sure how complete/reliable it is at the moment.
There is SMTCoq project that is trying to build a link betweem an SMT solver and an interactive
theorem prover, but they do not support Z3, I guess they have a good reason not to and wonder
what it is.
Thanks,
Appreciate any comments!
Beta Was this translation helpful? Give feedback.
All reactions