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

Tla+ 如何在TLA+;中证明或模型检验定理;?,tla+,Tla+,下面的模块声明一组介于10到99之间的数字,这些数字只能被2整除一次,并将其称为numbersthattdivideby2once。最后,它声明了一个定理,即常数输入是除以2的数的子集 --------------------------- MODULE TestModule --------------------------- EXTENDS Naturals CONSTANT input Numbers == { n \in Nat : n > 9 /\ n < 100 }

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

--------------------------- 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

=======================
------------------------------------模块测试模块---------------------------
延伸自然
恒定输入
数字=={n\n在Nat:n>9/\n<100}
除数by2(n)=(n%2)=0
dividesby2one(n)=DividesBy2(n)/\~ DividesBy2(n\div 2)
NumbersThatDivideBy2Once=={n\在数字中:DividesBy2Once(n)}
定理输入\除以2的子节数
=======================

如何检查这个定理对于给定的输入是否成立?如果我使用提供的一组数字作为
输入运行模型检查
,即使其中一些数字不属于
除以2的数字
,我仍然不会得到错误。

给你的定理起个名字

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


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

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

在这种情况下,你没有。因此,只需保留选项“no Behavior spec”,并如上所述,在“Model Checking Results”选项卡中指定要计算的常量表达式

THEOREM T == input \subseteq NumbersThatDivideBy2Once