Alloy 中导航风格背后的理论是什么

What is the theory behind the Navigational Style in Alloy

在 Daniel Jakson 的 Alloy 著名 book 中,他写了关于在 Alloy 中指定约束的三种不同风格:1) 谓词演算 2)导航风格 ,以及 3) 关系演算。 (第 3.1 节,第 34 页)

第一个和最后一个背后的理论对我来说不知何故很清楚,因为当我们将关系作为谓词时,第一个是传统的一阶逻辑;最后是关系演算,其中一切都被视为关系,并通过使用等式符号和一些代数运算(没有量词)来指定约束。书上说第二个最有表现力(第35页)

我的问题: 第二种(即导航风格)背后的理论是什么?我应该在哪里寻找(以及在哪个术语下)从理论上获得关于这个的更多信息。

在附录 E - 替代方法中,Daniel Jackson 讨论了具有导航风格的 OCL。我假设他从中借用了语法,因为他将其讨论为 Alloy.

之前的相关工作

导航风格的动机是你想要介于谓词演算之间的东西,它对集合或关系没有操作,所以在实践中使用起来非常笨拙和冗长(而且由于缺乏传递性,表达能力也较差闭包)和关系演算,由 Tarski 开创,它给你关系运算符但没有量词,这对大多数人来说是很不自然的(但它允许一些漂亮简洁的方式来表达属性)。导航风格介于两者之间,并为您提供 set/relation 运算符和量词,因此在这个意义上——至少是非正式的,如果你仔细定义了三种子语言,也可能是正式的——它比任何一种都更具表现力。同时,我想到大多数人都对简单的一阶量词感到满意,但对关系连接不太满意,因此倾向于编写其中表达式表示集合的公式。您可以将这些表达式中的每一个都视为从某个原子开始,用量化变量表示,然后 "navigating" 沿着关系得到越来越大的表示原子集的表达式。这就是我对像 me.parents.children 这样的表达式的看法:你从我开始,导航到我的 parents,然后从他们导航到他们的 children——结果是包含我和我的兄弟姐妹。根据我的经验,大多数人自然而然地倾向于这种导航风格。

的确,如果您必须从三种样式中选择一种与 OCL 相匹配的样式,那就是这种导航样式,尽管 OCL 确实具有非常复杂的语义(由于发生的各种强制转换和扁平化)在每个步骤自动),其中 Alloy 语义只是标准集和关系。语法可能更受面向 object 的语言(如 Java)的影响,即使它们没有 Alloy 所具有的那种关系图像(也就是说,如果你有一个字段 f并且可以写 x.f,你不能写 xs.f 为 f 从集合 xs 中的 objects 映射到的所有 objects 的集合!) .但是请注意,这里没有特殊的语法;这些只是相同运算符的使用方式。

当我在书中写这一页时,我以为它会给读者一些有用的直觉,但它似乎只是引起了更多的混乱!