我正在完成Alloy教程,我刚开始this chapter。我的问题是开始这一章的短语:
现在我们已经构建了一个模型来确保文件系统的结构正确性......
当我运行到目前为止构建的模型时,我仍然会断开文件系统,这似乎与此短语相矛盾。
这是使用Alloy 4.2,构建日期2012-9-25,几天前从网站上下载。我做错了什么还是故意的?根据我的理解,我没有在模型中看到任何阻止像这样断开连接的东西。但我的理解仍然有点模糊。
相关模型复制如下:
// File system objects
abstract sig FSObject { }
sig File, Dir extends FSObject { }
// A File System
sig FileSystem {
live: set FSObject,
root: Dir & live,
parent: (live - root) ->one (Dir & live),
contents: Dir -> FSObject
}{
// live objects are reachable from the root
live in root.*contents
// parent is the inverse of contents
parent = ~contents
}
我可以看到live: set FSObject
行可能需要连接,但这不是我目前对该行语义的理解。
答案 0 :(得分:4)
我接受教程关于结构正确性的评论意味着模型确保了属性:
在您显示的实例中,请注意Dir0不是活动的,没有内容,也没有父级。所以我认为实例服从我列出的所有约束,文件系统(植根于Dir3的树)实际上是连接的。 Dir0不是反例,也不是文件系统的结构问题;它只是一个文件系统对象,无法从任何文件系统根目录访问,因此不能生效。真?
请注意,尽管约束确实确保每个FileSystem都是连接图(实际上是树),但它们并不能确保文件系统彼此连接(也不是它们是不相交的)。如果您更改run命令以请求多个文件系统,这应该更容易看到。
您可能能够在IETF会议上就这些约束是否构成文件系统的“结构正确性”进行良好的讨论,但我认为在上下文中这个短语只是为了指向已完成的内容在文件系统示例的课程I和II中。