合金教程,断开的文件系统?

时间:2013-02-18 18:35:55

标签: alloy

我正在完成Alloy教程,我刚开始this chapter。我的问题是开始这一章的短语:

  

现在我们已经构建了一个模型来确保文件系统的结构正确性......

当我运行到目前为止构建的模型时,我仍然会断开文件系统,这似乎与此短语相矛盾。

Disconnected file system

这是使用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行可能需要连接,但这不是我目前对该行语义的理解。

1 个答案:

答案 0 :(得分:4)

我接受教程关于结构正确性的评论意味着模型确保了属性:

  • 文件系统root没有父级。
  • 每个活动对象都可以通过内容关系从根目录访问。
  • 父关系是内容关系的反转。
  • 从根目录可以访问的每个对象都是实时的。
  • 内容和父关系仅保留在活动对象上。 (不活动的对象没有父级,也没有内容。)

在您显示的实例中,请注意Dir0不是活动的,没有内容,也没有父级。所以我认为实例服从我列出的所有约束,文件系统(植根于Dir3的树)实际上是连接的。 Dir0不是反例,也不是文件系统的结构问题;它只是一个文件系统对象,无法从任何文件系统根目录访问,因此不能生效。真?

请注意,尽管约束确实确保每个FileSystem都是连接图(实际上是树),但它们并不能确保文件系统彼此连接(也不是它们是不相交的)。如果您更改run命令以请求多个文件系统,这应该更容易看到。

您可能能够在IETF会议上就这些约束是否构成文件系统的“结构正确性”进行良好的讨论,但我认为在上下文中这个短语只是为了指向已完成的内容在文件系统示例的课程I和II中。