考虑以下地址簿示例的简单变体
sig Name, Addr {}
sig Book { addr : Name -> Addr } // no lone on Addr
pred show(b:Book) { some n : Name | #addr[b,n] > 1 }
run show for exactly 2 Book, exactly 2 Addr, exactly 2 Name
在某些模型实例中,我可以在评估器中得到以下结果
all b:Book | show[b]
--> yields false
some b:Book | show[b]
--> yields true
show[Book]
--> yields true
如果 show 是一个关系,那么人们可能会期望得到如下答案:{ true, false }。假设它是一个谓词,则返回一个布尔值。我本来希望 show[Book] 是上面普遍量化的表达式的简写。相反,它似乎是在使用存在量化来折叠结果。任何人都知道这可能是什么原因,或者对 show[Book] 的含义有另一种解释?