Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Alloy 单例签名的并集始终等于父签名,即使父签名不是抽象的?_Alloy - Fatal编程技术网

Alloy 单例签名的并集始终等于父签名,即使父签名不是抽象的?

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

在下面的Alloy模型中,有三个单态子项(Tom、John和Barb)。他们延伸人。然后有一个断言说这个人完全由汤姆、约翰和巴伯组成。我期望合金分析仪生成一个反例,但它没有。为什么?人不是抽象的,所以可能有人不在(汤姆+约翰+巴伯),对吗?奇怪的是,当我从每个子签名中删除“一”时,分析器就会生成一个反例。我很困惑。你能解释一下这里发生了什么事吗

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