我正在尝试使用TLA +定理证明工具来证明算法的安全性。但是我发现TLAPS无法说明非常“简单”的数学事实。
我的第一个问题是:
EXTENDS Naturals
CONSTANTS x,y
ASSUME x \in Nat /\ y \in Nat
LEMMA x=y+1 => y<x
OBVIOUS
TLAPS不能单独使用任何后端证明程序来做到这一点。我还尝试将特定的后端证明与其他策略结合使用:
LEMMA x=y+1 => y<x
BY IsaM("blast")
但也失败了。同样,也无法检查其他类型的简单事实,例如:
LEMMA x<y => x<y+0
我过去曾经使用过一些后端定理证明,例如Z Solver或Isabelle,从我的记忆中他们非常强大。我想我在这里遗漏了一些东西……或者我不了解TLAPS证明组织者,或者我仍然需要使用公理来加载其他模块?。
答案 0 :(得分:1)
看来您在TLAPM中遇到了一个错误-至少在我机器上的开发版本中。原因是SMT转换没有采纳第二个假设。没有域限制,任何断言都不能证明。作为一个热修复,我在本地引理中添加了域限制。我现在可以证明:
LEMMA ASSUME x \in Nat, y \in Nat
PROVE x=y+1 => y < x BY SMT
目前解决该问题的另一种方法是,在需要时调用命名的假设:
ASSUME DOM == x \in Nat /\ y \in Nat
LEMMA x=y+1 => y < x BY SMT, DOM
应该通过。在这两种情况下,您都必须在规范的开头添加EXTENDS TLAPS
才能启用SMT
关键字。
我还将向维护者报告该错误。
更新:似乎TLAPM(出于性能原因而拒绝使用afaik)通常忽略了全局假设。带有命名假设的版本是首选方式。