Alloy 合金变量之间的链接。和初级变量。和合金关系变量

Alloy 合金变量之间的链接。和初级变量。和合金关系变量,alloy,Alloy,我似乎无法理解变量。和主变量。求解完成时显示的数字的含义。第5.2.1节中的合金手册解释了合金关系变量映射到与每个关系元组相关联的布尔变量。但是我不理解变量定义和gui中显示的变量计数之间的对应关系。例如,当运行此代码时(我正在使用Alloy Analyzer 4.2构建日期:2012-09-25 15:54 EDT): 它显示 0 vars. 0 primary vars. 0 clauses. 虽然存在一种关系。运行此代码时: sig A {} fact {no A } pred show

我似乎无法理解
变量。
主变量。
求解完成时显示的数字的含义。第5.2.1节中的合金手册解释了合金关系变量映射到与每个关系元组相关联的布尔变量。但是我不理解变量定义和gui中显示的变量计数之间的对应关系。例如,当运行此代码时(我正在使用Alloy Analyzer 4.2构建日期:2012-09-25 15:54 EDT):

它显示

0 vars. 0 primary vars. 0 clauses.
虽然存在一种关系。运行此代码时:

sig A {}
fact {no A }
pred show {}
run show for 2
变量计数如下所示:

6 vars. 2 primary vars. 5 clauses.

我可以理解,可能2个主变量对应于集合A的最大2个元素,但我不理解所列举的另外4个变量是什么。

基本上,主变量是对应于所声明签名实例的变量。它们的数量代表整个合金世界中创建的所有实例。另一方面,变量总数通常更大,因为它也反映了在编码到SAT公式中时表示给定事实所需的变量。(可以找到有关KodKod底层解算器的统计信息的一些详细信息。)

因此,在第二个示例中,由于签名实例限制为2,主变量的数量为3。(例如,如果您添加另一个签名,则主要变量的数量将为4。)变量总数反映了公式(CNF)编码中的变量总数,而这又取决于您声明的具体事实。请注意,在第一个示例中,不需要变量,因为没有要检查的内容(并且解算器不需要发出任何内容)

6 vars. 2 primary vars. 5 clauses.