4.2中的语义变化?

时间:2013-01-28 11:01:46

标签: alloy

我的问题是合金4.2中字段声明中()的语义是否发生了变化。

我在“软件抽象”中读到了

addr: (Book -> Name) -> lone Addr

表示关系addr将最多一个地址与每个地址簿和名称对相关联,但这在运行Alloy 4.2时不起作用

例如,

sig Book, Name, Addr  {}
sig AddBX {
  addr : (Book -> Name) -> lone Addr
}

run XRun {
  some B : Book, N : Name, X : AddBX | #X.addr[B][N] = 2
} 

Alloy 4.2找到一个模型实例,例如AddBX $ 2 with

Book$1 ->Name$0 ->Addr$0
Book$1 ->Name$0 ->Addr$1
Book$1 ->Name$0 ->Addr$2

如果我改用

addr : Book -> Name -> lone Addr

然后找不到同一次运行的实例。这似乎表明在合金4.2中,这是如何声明关系addr将最多一个地址与每个地址簿和名称对相关联,但我想对此进行确认。

1 个答案:

答案 0 :(得分:5)

这实际上是v4.2中的一个错误,正确的行为是Alloy4.1.10实现的。

我创建了v4.2的快照,修复了此问题,您可以在此处下载:

http://alloy.mit.edu/alloy/downloads/alloy4.2_2013-01-28.jar

感谢您报告此错误。