Alloy 单例签名的并集始终等于父签名,即使父签名不是抽象的?
在下面的Alloy模型中,有三个单态子项(Tom、John和Barb)。他们延伸人。然后有一个断言说这个人完全由汤姆、约翰和巴伯组成。我期望合金分析仪生成一个反例,但它没有。为什么?人不是抽象的,所以可能有人不在(汤姆+约翰+巴伯),对吗?奇怪的是,当我从每个子签名中删除“一”时,分析器就会生成一个反例。我很困惑。你能解释一下这里发生了什么事吗Alloy 单例签名的并集始终等于父签名,即使父签名不是抽象的?,alloy,Alloy,在下面的Alloy模型中,有三个单态子项(Tom、John和Barb)。他们延伸人。然后有一个断言说这个人完全由汤姆、约翰和巴伯组成。我期望合金分析仪生成一个反例,但它没有。为什么?人不是抽象的,所以可能有人不在(汤姆+约翰+巴伯),对吗?奇怪的是,当我从每个子签名中删除“一”时,分析器就会生成一个反例。我很困惑。你能解释一下这里发生了什么事吗 sig Person {} one sig Tom extends Person {} one sig John extends Person {}
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
这是因为默认范围是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