【发布时间】:2022-08-08 10:52:54
【问题描述】:
我正在使用 TPTP 语法测试一些定理证明器(例如 Z3、Alt-Ergo、Vampire 等)的归纳能力。令我惊讶的是,他们都没有设法证明以下简单的猜想:
tff(t1, type, (fun: $int > $int )).
tff(ax1, axiom, (
! [A: $int] : (
$less(A, 1) => (fun(A) = 123)
)
)).
tff(ax2, axiom, (
! [A: $int] : (
$greatereq(A, 1) => (fun(A) = fun($difference(A, 1)))
)
)).
tff(conj1, conjecture, ! [A: $int] : ($greatereq(A, 1) => (fun(A) = 123))).
% END OF SYSTEM OUTPUT
% RESULT: SOT_EWCr1V - Z3---4.8.9.0 says Timeout - CPU = 60.09 WC = 35.47
% OUTPUT: SOT_EWCr1V - Z3---4.8.9.0 says None - CPU = 0 WC = 0
这个猜想可以很容易地通过归纳来证明,但是对于我测试过的绝大多数定理证明者来说似乎并非如此。显然,如果我将域限制为仅一个元素而不是整组整数,则 ATP 会成功,因为它只需要检查一组有限的数字:
tff(t1, type, (fun: $int > $int )).
tff(ax1, axiom, (
! [A: $int] : (
$less(A, 1) => (fun(A) = 123)
)
)).
tff(ax2, axiom, (
! [A: $int] : (
$greatereq(A, 1) => (fun(A) = fun($difference(A, 1)))
)
)).
tff(conj1, conjecture, ! [A: $int] : ((A = 5) => (fun(A) = 123))).
% END OF SYSTEM OUTPUT
% RESULT: SOT_j9liHr - Z3---4.8.9.0 says Theorem - CPU = 0.00 WC = 0.08
% OUTPUT: SOT_j9liHr - Z3---4.8.9.0 says Proof - CPU = 0.00 WC = 0.09
这是自动定理证明器的一般限制吗?是否有任何工具在归纳方面表现良好?
PS:您可以使用以下在线工具进行试用:https://tptp.org/cgi-bin/SystemOnTPTP
PS2:TPTP 语法手册可以在这里找到:https://www.tptp.org/TPTP/TR/TPTPTR.shtml
标签: logic z3 smt theorem-proving logic-programming