是否有任何操作可以返回 Alloy 中关系的范围和域。
假设我在 Alloy 中定义了一个 sig,如下所示:
sig A {r : B }
sig B {}
我正在寻找要在 r 上应用的操作并给我 B(可能类似于返回 B 的 r[B])
上面的情况可能看起来很愚蠢,因为 r[B] 会返回 B,所以为什么我一开始不使用 B!实际上,我发现范围和域操作(如果它们存在的话)对于编写事实(约束)非常有用。例如:
sig O {sup:O}
sig M{mid: O, sup:O} {mid.sup=sup}
sig F{fid:O, sup:O}{fid.sup=sup}
fact K{
all o:O | lone so:M | so.mid=o
all o:O | lone so:F | so.fid=o
all o:O | one i:(fid+mid) | o in i[O] //I want to say fid+mid is injective, so expecting i[O] return range of i
}
任何想法?:)