如何在TLA +中证明或模型验证定理?

时间:2018-12-07 14:45:03

标签: tla+

下面的模块声明一组介于10到99之间的数字,这些数字只能被2整除一次,并将其称为NumbersThatDivideBy2Once。最后,它声明一个定理,常量inputNumbersThatDivideBy2Once的子集。

--------------------------- MODULE TestModule ---------------------------
EXTENDS Naturals

CONSTANT input

Numbers == { n \in Nat : n > 9 /\ n < 100 }

DividesBy2(n) == (n % 2) = 0

DividesBy2Once(n) == DividesBy2(n) /\  ~DividesBy2(n \div 2)

NumbersThatDivideBy2Once == { n \in Numbers: DividesBy2Once(n) }

THEOREM input \subseteq NumbersThatDivideBy2Once

=======================

如何检查该定理对给定输入是否成立?如果我使用提供的一组数字作为input进行模型检查,即使其中一些数字不是NumbersThatDivideBy2Once的一部分,我仍然不会出错。

1 个答案:

答案 0 :(得分:1)

给定理起一个名字,

THEOREM T == input \subseteq NumbersThatDivideBy2Once

转到“模型检查结果”选项卡,然后在“评估常数表达式”中引入T,以便对其进行评估。


需要告知您的模型检查器如何处理规范文件,该文件本质上是数学定义的公正集合。

在“正常使用”中,您想为TLC提供表示您的规范的时间公式(通常在规范文件中使用名称Spec)。您可以在“模型概述”选项卡的“行为规范是什么?”下对其进行介绍。这就是TLC用于执行模型检查的内容。

在这种情况下,您没有那个。因此,只需保留选项“ no behavior spec”,并如上所述,在“ Model Checking Results”选项卡中指定要评估的常数表达式即可。