考虑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]
{}
任何想法为什么?
答案 0 :(得分:3)
这是因为设置理解的方式有效。
{b':Books | b' = Books - b }
此表达式提供Books
的所有单例子集,它们等于Books - b
。但Books - b
是一个双元素集。所以没有单例集等于它,整体结果是{}
。
你可能只想要:
fun f[b:Books] : Books {
Books - b
}