单例子签名的并集总是等于父签名,即使父签名不是抽象的?
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
在下面的 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