mirror of
https://github.com/Z3Prover/z3
synced 2026-06-13 20:35:39 +00:00
tptp: share 0-arity decls across sorts to fix bare constant equality (#9587)
Fix the TPTP frontend so that a bare name used in an equality refers to a single shared `func_decl`, regardless of how the surrounding context coerces its sort. ## Problem With the following input the conjecture was not proved: ```tptp fof(a1,axiom, ! [X] : (X = a)). fof(c1,conjecture, b = a). ``` `parse_atomic_formula` created bare names as 0-arity **Bool predicates**, and `coerce_eq` later retyped them by calling `m.mk_func_decl(...)` directly, without registering the result in `m_decls`. So the `a` used inside `! [X] : (X = a)` (coerced to sort `U`) and the `a` used inside `b = a` (left as Bool) ended up as two unrelated `func_decl`s sharing only the name. The axiom no longer constrained the conjecture. ## Fix In `src/cmd_context/tptp_frontend.cpp`: 1. Add `mk_zero_arity_decl(name, range)` / `coerce_zero_arity(app*, range)` helpers that memoize the 0-arity `func_decl` per `(name, target sort)` in `m_decls`, delegating to the existing `mk_decl_or_ho_const` for `U` and Bool targets. 2. Rewrite `coerce_eq` to use the new helpers and add an explicit Bool / non-Bool retyping branch so a bare-Bool side is recast to the other side's sort. 3. In `parse_atomic_formula`, when a bare name is immediately followed by `=` or `!=`, create it as a non-predicate (sort `U`). Terms in equalities are no longer first introduced as Bool predicates. 4. Reorder the constructor init-list so `m_univ` is initialized before the pinned ref vectors (matches declaration order; silences `-Wreorder`). Net effect: every reference to a given name at a given sort yields the same `func_decl`, eliminating duplicate-symbol bugs in equalities over bare TPTP constants. ## Test Added `fof-bare-constant-equality` to `src/test/tptp.cpp`. Without the C++ change the new case asserts; with it, `./build/release/test-z3 /seq tptp` reports `PASS`. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
parent
43791ebf2a
commit
1323530001
2 changed files with 40 additions and 15 deletions
|
|
@ -73,6 +73,10 @@ fof(c1,conjecture, p(a)).)",
|
|||
R"(cnf(c1,axiom, p(X)).
|
||||
cnf(c2,axiom, ~ p(a)).)",
|
||||
"% SZS status Unsatisfiable"},
|
||||
{"fof-bare-constant-equality",
|
||||
R"(fof(a1,axiom, ! [X] : (X = a)).
|
||||
fof(c1,conjecture, b = a).)",
|
||||
"% SZS status Theorem"},
|
||||
{"tff-negative-literal",
|
||||
R"(tff(c1,conjecture, $less(-2,2)).)",
|
||||
"% SZS status Theorem"},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue