MIT Alloy:接收器表示法中的谓词

时间:2016-03-14 13:24:16

标签: alloy

我有一个简单的银行模型,有两种帐户类型A和B

abstract sig Account {}
sig A extends Account {}
sig B extends Account {}

sig Customer {
    hasAccount: some Account
}

sig Bank {
    hasCustomer: some Customer
}

我想表示,如果所有客户的帐户类型为A,则必须至少拥有一个B类帐户。我的谓词:

pred Customer::BifA(){
    some a:A,b:B | a in this.hasAccount => b in this.hasAccount
}

但是,这不会产生预期的结果。分析器给我的许多实例包含帐户类型为A但不属于类型B的客户。

我的谓词中的错误在哪里?

1 个答案:

答案 0 :(得分:2)

您不应该使用A的存在量化。想象一下,客户没有A类型的帐户。有了这个帐户,其含义很简单。

将其更改为通用量化应该有效。类似的东西:

all a:A | a in this.hasAccount => some b:B | b in this.hasAccount