mirror of
https://github.com/Z3Prover/z3
synced 2026-05-16 15:15:35 +00:00
Integrate TPTP with internal APIs via cmd_context, add embedded-string TPTP regression tests, and fix TFF arithmetic/timeout regressions (#9483)
* Add shell-integrated self-contained TPTP frontend and CLI wiring Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/ba80bc5a-d80f-4d9f-8ed4-a962f697697c Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Fix TPTP frontend build integration and validate with tests Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/ba80bc5a-d80f-4d9f-8ed4-a962f697697c Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Address review feedback and clean up TPTP/frontend readability Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/ba80bc5a-d80f-4d9f-8ed4-a962f697697c Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Refine TPTP parser semantics and keying based on review feedback Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/ba80bc5a-d80f-4d9f-8ed4-a962f697697c Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Polish TPTP frontend keys/path checks and deduplicate skip logic Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/ba80bc5a-d80f-4d9f-8ed4-a962f697697c Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Add src/api include path to shell CMake target Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/e07bbe13-16bc-4cc6-92e8-1708981b04ad Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Use internal AST/cmd_context APIs in TPTP shell frontend Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/2a6b01d0-c799-4e44-aa73-ef228cb4402e Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Harden TPTP cmd_context integration and suppress check-sat echo Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/2a6b01d0-c799-4e44-aa73-ef228cb4402e Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Make TPTP check-sat stream redirection exception-safe Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/2a6b01d0-c799-4e44-aa73-ef228cb4402e Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Address review nits in TPTP internal API frontend Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/2a6b01d0-c799-4e44-aa73-ef228cb4402e Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Refine TPTP frontend ownership and stream restoration semantics Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/2a6b01d0-c799-4e44-aa73-ef228cb4402e Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Add TPTP regression files and test-z3 tptp test Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/dc1d46fc-4b6c-4f64-91a0-9fb57c73c166 Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Adjust Agatha TPTP expectation and tidy test helper constant Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/dc1d46fc-4b6c-4f64-91a0-9fb57c73c166 Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Harden tptp test command handling and readability Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/dc1d46fc-4b6c-4f64-91a0-9fb57c73c166 Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Validate tptp test filenames against empty and traversal patterns Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/dc1d46fc-4b6c-4f64-91a0-9fb57c73c166 Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Tighten tptp filename checks and rename output buffer constant Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/dc1d46fc-4b6c-4f64-91a0-9fb57c73c166 Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Use read_tptp API directly in tptp unit test Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/f07170c1-549a-464c-89f8-fee973f9790f Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Clarify required tptp frontend extern flags in test Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/f07170c1-549a-464c-89f8-fee973f9790f Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Move tptp frontend to cmd_context and add string API Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/1be7cf7e-2747-43ba-9a33-2e71dad2d14d Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Polish tptp stream parser naming and simplify test asserts Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/1be7cf7e-2747-43ba-9a33-2e71dad2d14d Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Fix mk_make include resolution for moved tptp frontend Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/7cbce0d2-0ed9-4941-91d4-49977c0a97a1 Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Update CMakeLists.txt * Fix TPTP parsing, arithmetic builtin mapping, and timeout handling Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/f2be81f6-e506-47ea-a38a-46d1970add8c Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Polish TPTP parser diagnostics and type parsing details Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/f2be81f6-e506-47ea-a38a-46d1970add8c Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Refine digit-check helper naming in TPTP frontend Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/f2be81f6-e506-47ea-a38a-46d1970add8c Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Add rational zero-denominator regression test for TPTP Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/f2be81f6-e506-47ea-a38a-46d1970add8c Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Fix missing g_display_* symbol definitions for non-shell link targets Agent-Logs-Url: https://github.com/Z3Prover/z3/sessions/0283d958-26a8-4b1c-86be-b75a5bc26d8c Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
a002d027a7
commit
1a2d3e0ebb
8 changed files with 1044 additions and 10 deletions
95
src/test/tptp.cpp
Normal file
95
src/test/tptp.cpp
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
#include <string>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include "util/debug.h"
|
||||
#include "util/error_codes.h"
|
||||
#include "cmd_context/tptp_frontend.h"
|
||||
|
||||
struct tptp_case {
|
||||
char const* name;
|
||||
char const* input;
|
||||
char const* expected_status;
|
||||
};
|
||||
|
||||
static unsigned run_tptp(char const* input, std::string& out, std::string& err) {
|
||||
std::streambuf* old_out = std::cout.rdbuf();
|
||||
std::streambuf* old_err = std::cerr.rdbuf();
|
||||
std::ostringstream out_buf;
|
||||
std::ostringstream err_buf;
|
||||
std::cout.rdbuf(out_buf.rdbuf());
|
||||
std::cerr.rdbuf(err_buf.rdbuf());
|
||||
unsigned code = read_tptp_string(input);
|
||||
std::cout.rdbuf(old_out);
|
||||
std::cerr.rdbuf(old_err);
|
||||
out = out_buf.str();
|
||||
err = err_buf.str();
|
||||
return code;
|
||||
}
|
||||
|
||||
static std::string run_tptp(char const* input) {
|
||||
std::string out, err;
|
||||
unsigned code = run_tptp(input, out, err);
|
||||
ENSURE(code == 0);
|
||||
return out;
|
||||
}
|
||||
|
||||
extern bool g_display_statistics;
|
||||
extern bool g_display_model;
|
||||
|
||||
void tst_tptp() {
|
||||
g_display_statistics = false;
|
||||
g_display_model = false;
|
||||
std::vector<tptp_case> cases = {
|
||||
{"agatha-butler",
|
||||
R"(fof(ax1,axiom, lives(agatha)).
|
||||
fof(ax2,axiom, lives(butler)).
|
||||
fof(ax3,axiom, lives(charles)).
|
||||
fof(ax4,axiom, ! [X] : (lives(X) => (X = agatha | X = butler | X = charles))).
|
||||
fof(ax5,axiom, ! [X,Y] : (killed(X,Y) => hates(X,Y))).
|
||||
fof(ax6,axiom, ! [X,Y] : (killed(X,Y) => ~ richer(X,Y))).
|
||||
fof(ax7,axiom, ! [X] : (hates(agatha,X) => ~ hates(charles,X))).
|
||||
fof(ax8,axiom, ! [X] : (X != butler => hates(agatha,X))).
|
||||
fof(ax9,axiom, ! [X] : (~ richer(X,agatha) => hates(butler,X))).
|
||||
fof(ax10,axiom, ! [X] : (hates(agatha,X) => hates(butler,X))).
|
||||
fof(ax11,axiom, ! [X] : (? [Y] : ~ hates(X,Y))).
|
||||
fof(ax12,axiom, agatha != butler).
|
||||
fof(ax13,axiom, ? [X] : killed(X,agatha)).
|
||||
fof(conj,conjecture, ~ killed(butler,agatha)).)",
|
||||
"% SZS status Theorem"},
|
||||
{"socrates-theorem",
|
||||
R"(fof(a1,axiom, ! [X] : (human(X) => mortal(X))).
|
||||
fof(a2,axiom, human(socrates)).
|
||||
fof(c1,conjecture, mortal(socrates)).)",
|
||||
"% SZS status Theorem"},
|
||||
{"simple-sat",
|
||||
R"(fof(a1,axiom, p(a)).)",
|
||||
"% SZS status Satisfiable"},
|
||||
{"tff-negative-literal",
|
||||
R"(tff(c1,conjecture, $less(-2,2)).)",
|
||||
"% SZS status Theorem"},
|
||||
{"tff-rational-literal",
|
||||
R"(tff(c1,conjecture, $less(1/2,2/3)).)",
|
||||
"% SZS status Theorem"},
|
||||
{"tff-type-decl-arrow",
|
||||
R"(tff(p_type,type, p: $int > $o ).
|
||||
tff(a1,axiom, p(1)).
|
||||
tff(c1,conjecture, p(1)).)",
|
||||
"% SZS status Theorem"},
|
||||
{"tff-typed-int-quantifier",
|
||||
R"(tff(c1,conjecture, ? [X: $int] : $less(12,X)).)",
|
||||
"% SZS status Theorem"},
|
||||
{"tff-lesseq-built-in",
|
||||
R"(tff(c1,conjecture, $lesseq(2,2)).)",
|
||||
"% SZS status Theorem"}
|
||||
};
|
||||
for (auto const& c : cases) {
|
||||
std::string out = run_tptp(c.input);
|
||||
ENSURE(out.find(c.expected_status) != std::string::npos);
|
||||
}
|
||||
|
||||
std::string out, err;
|
||||
unsigned code = run_tptp("tff(c1,conjecture, $less(1/0,1)).", out, err);
|
||||
ENSURE(code == ERR_PARSER);
|
||||
ENSURE(err.find("denominator of rational literal cannot be zero") != std::string::npos);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue