证明基本算术性质

Proving basic arithmetic properties

我正在尝试TLA+的定理证明工具来证明算法的安全属性。但我发现 TLAPS 无法计算非常 "simple" 数学事实。

我的第一个问题是:

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 证明组织者或者我仍然需要加载一些其他带有公理的模块?

您似乎在 TLAPM 中遇到了错误——至少在我机器上的开发版本中是这样。原因是 SMT 翻译没有采用第二个假设。没有域限制,none 的断言应该是可证明的。作为热修复,我将域限制添加到本地引理。我现在可以证明:

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 出于性能原因)。带有命名假设的版本是首选方式。