单例子签名的并集总是等于父签名,即使父签名不是抽象的?

The union of singleton sibsignatures always equal the parent signature, even when the parent is not abstract?

在下面的 Alloy 模型中,有三个单例子签名(Tom、John 和 Barb)。他们扩展了 Person。然后有一个断言说 Person 仅由 Tom、John 和 Barb 组成。我希望 Alloy 分析器生成一个反例,但它没有。为什么?人不是抽象的,所以可能有不在 (Tom + John + Barb) 中的人,对吧?奇怪的是,当我从每个子签名中删除 "one" 时,分析器会生成一个反例。我很困惑。你能解释一下这里发生了什么吗?

sig Person {}

one sig Tom extends Person {}
one sig John extends Person {}
one sig Barb extends Person {}

assert No_Person_Not_In_The_Extension_Signatures {
   Person = (Tom + John + Barb)
}

check No_Person_Not_In_The_Extension_Signatures

因为默认作用域是3,检查4的作用域,你会看到反例:

sig Person {}

one sig Tom extends Person {}
one sig John extends Person {}
one sig Barb extends Person {}

assert No_Person_Not_In_The_Extension_Signatures {
   Person = (Tom + John + Barb)
}

check No_Person_Not_In_The_Extension_Signatures for 4