合金航行风格背后的理论是什么?

时间:2015-04-04 19:34:00

标签: alloy

在Daniel Jakson撰写的合金知识book中,他写了三种不同的样式来指定Alloy中的约束:1)谓词演算 2)导航样式,以及3)关系演算。 (第3.1节,第34页)

第一个和最后一个理论背后的理论对我来说是清楚的,因为当我们把关系当作谓词时,第一个是传统的一阶逻辑;最后一个是关系演算,其中一切都被视为关系,约束是通过使用方程符号和一些代数运算(没有量词)来指定的。在书中,据说第二个具有最强烈的表达能力(第35页)。

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

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

在附录E - 替代方法中,丹尼尔杰克逊讨论了具有导航风格的OCL。我会假设他从中借用了语法,因为他将其作为在Alloy之前的相关工作进行了讨论。