访问示例中的对象编号

Access object numbers in examples

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

有没有办法告诉它,我想要这些按升序排列?

或者 A3 必须在 A1 之后,但 A2 在 A4 之前或类似的限制。

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

open util/ordering[A]

如果您使用此库,那么分析器将尽最大努力使 A 原子保持升序(根据库中声明的 next 关系,这意味着 A.next 将是 A 等等)。此外,由于改进了对称性破坏,分析将更加有效。但是,您需要注意签名 A 将变得完全饱和,因为 5 A 的范围将与 exactly 5 A.

相同

在一般情况下,无法将 sig 实例的名称连接到您在模型中定义的任何关系(无论是 "chaining relation" 还是 util/ordering 库)。 (本质上,这取决于 Alloy 的求解器,它可能会意外地实例化新名称。)

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

one sig A1, A2, A3, ... extends A {}

与 "chaining relation":

succ = A1 -> A2 + A2 -> A3 + ...

现在,由于顺序明确地固定在带有名称的签名上,这些签名是有序的,Alloy 找到的模型确实会满足您想要的 属性。