Alloy 在示例中访问对象编号

Alloy 在示例中访问对象编号,alloy,Alloy,如果我只有一个sig A,并且想要链接它的多个实例(例如通过后续关系),Alloy将随机对它们进行编号(A1、A2、A3……) 有没有办法告诉我,我希望这些东西按升序排列 或者A3必须在A1之后,但A2必须在A4之前或类似约束。如果您的目标是对a施加总订单,那么我建议使用util/ordering库: open util/ordering[A] 如果您使用此库,则分析器将尽最大努力使A原子按升序排列(根据库中声明的next关系,即A$1。next将是A$2,依此类推)。此外,由于对称性破缺的改

如果我只有一个sig A,并且想要链接它的多个实例(例如通过后续关系),Alloy将随机对它们进行编号(A1、A2、A3……)

有没有办法告诉我,我希望这些东西按升序排列


或者A3必须在A1之后,但A2必须在A4之前或类似约束。

如果您的目标是对
a
施加总订单,那么我建议使用
util/ordering
库:

open util/ordering[A]

如果您使用此库,则分析器将尽最大努力使
A
原子按升序排列(根据库中声明的
next
关系,即
A$1。next
将是
A$2
,依此类推)。此外,由于对称性破缺的改进,分析将更加有效。但是,您需要知道签名A将变得完全饱和,即
5A
的范围将与
5A
完全相同,无法将sig实例的名称连接到您在模型中定义的任何关系(无论是“链接关系”还是
util/ordering
库),在一般情况下。(本质上,这取决于Alloy的解算器,它可能会不可预测地实例化新名称。)

一种可能适用于您的情况的替代方法可能是声明多个SIG,例如:

one sig A1, A2, A3, ... extends A {}
具有“链接关系”:


现在,由于排序明确地固定在已排序的带有名称的签名上,Alloy发现的模型将确实满足您所需的属性。

不幸的是,就我而言,完全饱和签名的限制是不可行的。
succ = A1 -> A2 + A2 -> A3 + ...