合金 - 移除对象时获取空集

时间:2013-10-28 16:25:47

标签: alloy

考虑Alloy中的以下规范:

sig Books {}
fun f[b:Books] : Books {

    {b':Books | b' = Books -b }
}
run show {}

假设我们有一个$ univ = {Books $ 0,Books $ 1,Books $ 2} $的实例。使用$ Books $ 0 $评估函数f会产生空集而不是$ {Books $ 1,Books $ 2} $:

f[Books$0]
{}

任何想法为什么?

1 个答案:

答案 0 :(得分:3)

这是因为设置理解的方式有效。

{b':Books | b' = Books - b }

此表达式提供Books的所有单例子集,它们等于Books - b。但Books - b是一个双元素集。所以没有单例集等于它,整体结果是{}

你可能只想要:

fun f[b:Books] : Books {
   Books - b
}