下面的模块声明一组介于10到99之间的数字,这些数字只能被2整除一次,并将其称为NumbersThatDivideBy2Once
。最后,它声明一个定理,常量input
是NumbersThatDivideBy2Once
的子集。
--------------------------- 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
的一部分,我仍然不会出错。
答案 0 :(得分:1)
给定理起一个名字,
THEOREM T == input \subseteq NumbersThatDivideBy2Once
转到“模型检查结果”选项卡,然后在“评估常数表达式”中引入T
,以便对其进行评估。
需要告知您的模型检查器如何处理规范文件,该文件本质上是数学定义的公正集合。
在“正常使用”中,您想为TLC提供表示您的规范的时间公式(通常在规范文件中使用名称Spec
)。您可以在“模型概述”选项卡的“行为规范是什么?”下对其进行介绍。这就是TLC用于执行模型检查的内容。
在这种情况下,您没有那个。因此,只需保留选项“ no behavior spec”,并如上所述,在“ Model Checking Results”选项卡中指定要评估的常数表达式即可。