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

时间:2017-01-28 12:29:12

标签: alloy

在下面的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

1 个答案:

答案 0 :(得分:2)

这是因为默认范围是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