谓词与谓词和谓词没有参数合金

时间:2012-11-16 16:10:39

标签: alloy

我在一本书中看到了以下定义:

pred show(b: Book){
  some b.addr
}

其中

abstract sig Name, Addr {}
sig Book { addr: Name lone -> lone Addr }

在使用Alloy分析仪后,我意识到这与

相同
pred show(){
  some b:Book | some b.addr
}

我很好奇将Book指定为参数的优势是什么,而不使用使用量词的第二种方法?

1 个答案:

答案 0 :(得分:1)

使用或不使用谓词参数不是一种“方法”,它具有不同的语义。如果您在谓词中包含some b,则无法在其中使用all b ...

例如:

sig Addr {}

sig Book {
    addr: Addr
}

pred show {
    some b:Book | some b.addr
}

pred show'[b:Book] {
    some b.addr
}

check { show }

// These are not possible without an argument to show'
check { all b:Book | show'[b] }
check { some b:Book | show'[b] }
check { no b:Book | show'[b] }