证明基本算术性质
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 出于性能原因)。带有命名假设的版本是首选方式。
我正在尝试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 出于性能原因)。带有命名假设的版本是首选方式。