所以我有一个谓词,它以一个集合作为参数,所以我可以这样做:
all disj t1, t2, t3: set Thing | predicate[t1+t2+t3]
我想知道是否可以通过指定集合的大小来实现这一点,所以类似
all ts: set of 4 Thing | predicate[ts]
我最终想要做的是找到谓词有效的最小整数。这有可能吗?
答案 0 :(得分:3)
经常不鼓励高阶量化,因为据我所知,Alloy Analyzer不能总是处理它们。 (它使用skolemization来摆脱它们,但不能总是应用它们)
因此我会简化你的模型如下:
sig Thing{
}
run predicate for exactly 4 Thing
在pred predicate
中直接评估你对整套Thing(约束为恰好包含4个原子)感兴趣的属性。 Thing.field = ....
all disj t1, t2, t3: set Thing | predicate[t1+t2+t3]
正在做你期望它做的事情。实际上,t1 t2和t3都是Thing的集合,具有它们是不相交集的属性。 t1 + t2 + t3因此不一定会产生一组3件事。
答案 1 :(得分:1)
不确定你在这里想要达到的目的,但直接表达你似乎要求的东西
all ts: set of 4 Thing | predicate[ts] -- not Alloy
将是
all ts: set Thing | #ts = 4 implies predicate[ts]