所有权类型和分离逻辑似乎具有相似的目标,即对所有权和别名的控制。也许,我还应该补充:编写模块化规范的能力。
关于所有权类型和分离逻辑之间的关系了解多少?
所有权类型和分离逻辑似乎具有相似的目标,即对所有权和别名的控制。也许,我还应该补充:编写模块化规范的能力。
关于所有权类型和分离逻辑之间的关系了解多少?
Answers:
我最近完成了对所有权类型的调查,发现很少讨论这两个主题之间的关系。我碰到的最接近的三篇论文如下,它们奇怪地来自同一会议:
杨钊和约翰·博伊兰德。所有权类型的基本权限解释。在第二届IEEE / IFIP软件工程理论方面的国际研讨会上,TASE 2008,2008年6月17日至19日,中国南京。IEEE计算机协会,2008年,第65-72页。
Wang Shuling,LuísSoares Barbosa和JoséNuno Oliveira。约束分离逻辑的关系模型。在2008年6月17日至19日于中国南京举行的第二届IEEE / IFIP软件工程理论方面国际研讨会上,TASE 2008。IEEE计算机协会,2008年,第263-270页。
王淑玲和邱宗彦。限制的通用模型及其应用。在2008年6月17日至19日于中国南京举行的第二届IEEE / IFIP软件工程理论方面国际研讨会上,TASE 2008。IEEE计算机协会,2008年,第57-64页。
第一篇论文根据博伊兰德的部分权限对两种类型的所有权类型进行了编码,即所有者作为主导者和所有者作为锁定,这是一种为程序推理而开发的能力系统。
第二篇论文采用类似于所有权类型中的约束思想,并将其添加到分离逻辑中。
第三篇论文开发了一种语义方法,该方法用于对各种限制规则(例如所有权类型)进行编码。我不确定他们的系统是否也涵盖分隔逻辑,并且目前无法访问。他们的方法是临时的。对于我不久前与詹姆斯·诺布尔(James Noble)和其他人撰写的一篇论文,它可以被视为一种更正式,更系统的文章:
我了解差异的方式是,所有权类型会约束对象图的形状,而子结构系统(如分离逻辑)将管理访问堆的权限。
相反,诸如线性类型和分离逻辑之类的子结构系统依赖于资源的思想。堆的每个区域都是一种资源,如果您不拥有该资源,就无法使用它。这使得框架条件非常容易:它们始终保持住。
表面上的区别(尽管很长一段时间使我感到困惑)是所有权类型是类型,而分离逻辑是程序逻辑。幸运的是,尽管所有权类型是在类型理论的背景下诞生的,但人们也将这些思想应用于程序逻辑。
我知道的两个主要理论工作是卡西奥斯关于动态框架的工作,班纳吉和纳曼(及其学生)在区域逻辑工作中系统地加以利用。
据我了解,他们的基本方法是采用Hoare逻辑,然后:
每种方法都有优点和缺点。
与子结构方法相比,所有权使使用框架属性的便利性大大降低,因为您必须计算框架条件。
另一方面,DAG上的算法以所有权风格支持更漂亮的归纳证明,因为您可以将覆盖区与指针结构分离。在分离风格的规范中,自然的事情是在生成树上给出一个归纳不变式。但是,如果算法计算的生成树与您的不变式所生成的树不同,那么您将遭受巨大的痛苦。
我的一般感觉是,分隔比所有权更容易使用,因为在命令式程序中,几乎每个命令都需要框架属性。(Dave Naumann认为区域逻辑更适合自动化,因为断言逻辑仍然是普通的FOL,因此您可以使用现有的定理证明者和SMT求解器。)
编辑:我刚刚找到了马特·帕金森(Matt Parkinson)和亚历克斯·萨默斯(Alex Summers)的以下论文:分离逻辑与隐式动态帧之间的关系,他们声称提供了使两种方法统一的逻辑。