我有一个简单的银行模型,有两种帐户类型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的客户。
我的谓词中的错误在哪里?
答案 0 :(得分:2)
您不应该使用A
的存在量化。想象一下,客户没有A
类型的帐户。有了这个帐户,其含义很简单。
将其更改为通用量化应该有效。类似的东西:
all a:A | a in this.hasAccount => some b:B | b in this.hasAccount