访问示例中的对象编号
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 找到的模型确实会满足您想要的 属性。
如果我只有一个 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 找到的模型确实会满足您想要的 属性。