【发布时间】:2015-01-09 23:26:23
【问题描述】:
我有以下定义。在合金中:
sig A {b : set B}
sig B{}
sig Q {s: A , t: B}
我想添加一组约束,使得对于每个关系 b1:b 存在一个且只有一个 Q1:Q 其中 Q1.s 和 Q1.t分别指 b1 的源和目标。例如,如果我有一个包含 A1 和 B1 且 b1 连接它们的实例(即 b1:A1->B1),那么我还希望有一个 Q1,其中 Q1.s=A1 和 Q1.t=B1。
显然Q的数(基数)等于b关系的数(基数)。
我设法写了一个如下的约束:
t in s.b
all q1,q2:Q | q1.s=q2.s and q1.t=q2.t => q1=q2
all a1:A,b1:B | a1->b1 in b => some q:Q | q.s=a1 and q.t=b1
我想知道是否有人有更简洁的方式来表达我在合金事实方面的意图。如果 Alloy util 包能让生活更轻松,我愿意使用它。
谢谢
【问题讨论】:
标签: alloy