访问示例

时间:2016-02-17 10:16:44

标签: alloy

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

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

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

2 个答案:

答案 0 :(得分:2)

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

open util/ordering[A]

如果您使用此库,那么分析器将尽力保持A原子按升序排列(根据库中声明的next关系,这意味着{{1}将是A$1.next等等。此外,由于改进的对称性破坏,分析将更有效。但是,您需要注意签名A将完全饱和,因为A$2的范围将与5 A相同。

答案 1 :(得分:1)

在一般情况下,无法将sig实例的名称连接到您在模型中定义的任何关系(与#34;链接关系"或util/ordering库)。 (基本上,这取决于Alloy的解算器,它可能无法预测地实例化新名称。)

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

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

与#34;链接关系":

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

现在,由于订单是明确修复的,其名称是有序的,所以Alloy找到的模型确实可以满足你想要的属性。