逻辑关系和模拟之间有什么区别?


29

我是研究程序等效性方法的初学者。我已经阅读了几篇有关定义逻辑关系或模拟的论文,以证明两个程序是等效的。但是我对这两种技术很困惑。

我只知道逻辑关系是归纳定义的,而模拟是基于共归进行的。为什么用这种方式定义它们?他们的利弊分别是什么?在不同情况下应该选择哪一个?


1
您可能想要提供您已阅读的这些论文的链接。这将使您更清楚哪些具体示例使您感到困惑。
马克·哈曼

1
对于逻辑关系,我已经阅读了Hur和Dreyer的最新论文“机器学习与汇编之间的Kripke逻辑关系”(POPL'11)。我还阅读了Pierce的书“类型和编程语言的高级主题”中的经典章节。我发现逻辑关系是在语言的类型结构上归纳定义的,但是如果语言没有类型结构(如C)怎么办?(我想这似乎是另一个问题。)
Hongjin Liang

1
对于模拟,我阅读了Hennessy和Milner的原始论文“非确定性和并发性的代数定律”。Koutavas和Wand的“推理高阶命令程序的小双仿真”(POPL'06)对我来说是难以理解的,我不确定为什么他们称他们的方法为“双仿真”。
Hongjin Liang

3
如果您在帖子的评论中提供您提供的信息,那就更好了。您可以通过单击问题下方的编辑链接来编辑问题。
卡维

1
@HongjinLiang:如果您没有类型结构(或者您具有递归类型),则可以使用逐步索引的逻辑关系-逻辑关系对类型使用归纳,而逐步索引则对观察步骤进行归纳。您可以在Amal Ahmed的研究声明中找到指针:ccs.neu.edu/home/amal/ahmed-research.pdf。(关于逻辑关系研究的另一个概述是Derek Dreyer的演讲及其研究声明:mpi-sws.org/~dreyer/research.pdf)。
Blaisorblade 2014年

Answers:


20

我对这个问题的答案可能是新颖的。实际上,我在过去六个月左右的时间里仍在仔细考虑它,并且尚未在论文中进行介绍。

一般的论断是,诸如“逻辑关系”,“模拟”甚至“不变式”之类的关系推理原理是数据抽象或信息隐藏的体现。无论哪里藏有信息,这些原则都会浮现。

自动机理论家是最早发现它的人。自动机具有隐藏状态。因此,您需要关系推理来讨论它们的等效性。自动机理论家在同态性上苦苦挣扎了一段时间,放弃了,提出了一种称为“关系覆盖”的概念,这是一种模拟关系。

米尔纳(Milner)于1971年在一篇鲜为人知但非常基础的论文中提出了这一想法,该论文被称为“ 程序之间的模拟的代数概念 ”。的数据表示的正确性,证明在1972年”(但使用抽象功能而不是关系,因为他认为关系“更简单”)。后来,他撤回了简单性声明,并返回到在“ 数据精炼完善 ”中使用关系。雷诺兹在《编程技巧》中使用关系推理“,第5章(1981)。他认为关系比抽象函数更为自然和笼统。如果您回过头阅读本章,您会发现潜伏着关系参数化的思想,等待被发现。当然,两年后,雷诺(Reynolds)发表了“类型,抽象和参数多态性”(1983)。

看起来所有这些想法都与类型无关,但它们确实与类型有关。状态语言和模型具有内置的数据抽象。您无需定义“抽象数据类型”即可隐藏信息。您只需要声明一个局部变量并将其隐藏即可。我们可以在头几周内将其教给Java班的一年级学生。没汗

另一方面,功能语言和模型必须通过type隐藏信息。功能模型没有内置的数据抽象。我们必须添加它明确,使用。因此,如果将有状态语言转换为功能语言,则会注意到所有本地状态都已转换为类型变量。要详细了解其工作原理,请参阅我的论文“类Algol语言中的对象和类 ”,但是这些思想确实来自Reynolds 1981(“ Algol的本质”)。现在,我们只是更好地理解了这些经典思想。

拿两个要证明相等的机器M '。米尔纳(1971)说,定义MM '状态之间的关系,并证明这两个机器保留了该关系。雷诺参量说,认为机器的状态属于XX '类型。在它们之间定义一个关系R。如果机器的类型为F X F X ',并通过它们的状态类型进行参数化,则检查两个机器是否通过以下关系关联中号中号中号中号XX[RFXFXF[R

因此,模拟和关系参数化本质上是相同的想法。这不仅是表面上的相似。前者是为内置数据抽象的有状态语言而设计的。后者适用于无状态语言,在无状态语言中,通过类型变量获取数据抽象。

那逻辑关系呢?从表面上看,逻辑关系似乎是一个更笼统的想法。参量讨论如何在同一模型中关联类型变量,而逻辑关系似乎在不同模型之间关联类型。(Dave Clarke早些时候对此进行了精彩的论述。)但是我的感觉是(并且仍然有待证明)这是某种尚未形成的高级参数化形式的实例。敬请期待在这方面取得更多进展。


[注意]逻辑关系和模拟之间的联系在我们最近的论文《逻辑关系和参数:类别理论和编程语言的雷诺程序》中进行了讨论。


我想知道,上述关系是在给定描述机器的F的情况下所谓的R的所谓关系提升是否正确。F[R[Rfunctor F
Dave Clarke 2013年

@DaveClarke是的,它是相同的想法。在定义的雷诺数风格,每种类型的构造配备了一个关系动作即关联,到每个关系- [R X X ',一个对应关系˚F [R ) ˚F X ˚F X '满足一些公理。在另一些社区中,他们希望从其他原则中得出F R ,因此他们称其为关系提升。该˚F F[RXXF[RFXFXF[R在这个过程中产生的结果将是雷诺意义上的关系行为。F[R
Uday Reddy 2013年

14

关键区别之一是使用逻辑关系作为一种技术来显示一类程序(例如,输入到编译器)对应于另一类程序(例如,编译器的输出),而使用仿真关系显示两个程序之间的对应关系。

这两个概念之间的相似之处在于它们都定义了一个关系,用于显示两个不同实体之间的对应关系。从某种意义上说,人们可以将逻辑关系看作是一种根据类型的语法归纳定义的模拟关系。但是存在各种不同的模拟关系。

逻辑关系可以用来显示ML之类的语言与其翻译成汇编语言之间的对应关系,如您所阅读的论文中所述。在类型结构上归纳定义逻辑关系。逻辑关系提供了一种组合手段,用于通过显示每个类型构造函数的正确翻译来显示例如正确的翻译。在函数类型中,正确性条件条件会说诸如此类,该函数的转换将转换良好的输入转换为转换良好的输出。

对于基于lambda演算的语言,逻辑关系是一种通用技术。逻辑关系的其他应用包括(从此处开始):表征lambda可定义性,关联指称语义定义,表征参数多态性,建模抽象解释,验证数据表示,定义完全抽象的语义以及建模高阶语言中的局部状态。

仿真关系通常用于显示两个程序的等效性。通常,此类程序会产生某种观察,例如在通道上发送消息。如果P可以执行Q可以做的所有事情,尽管可能更多,但一个程序P可以模拟另一个Q。

粗略地讲,双仿真是两个仿真关系放在一起。您将显示程序P和模拟程序Q,并且程序Q可以模拟程序P,并且您可以进行双模拟,尽管通常会出现其他条件。维基百科关于双仿真的条目是一个很好的(更精确的)起点。存在着数千种想法的变体,但它是一个基本的想法,它或多或少地以计算机科学,模态逻辑和模型理论的相同形式被重新发明。Sangiorgi的文章给出了这个想法的精彩历史。

建立两个概念之间关系的一篇论文是安迪·皮茨的《语义学与语法之间的逻辑关系》注释》,它使用逻辑关系(最终是一个句法定义的语义概念)来证明关于应用双仿真的某种性质,这是一种纯粹的句法概念。


非常感谢您的详细解释!我将阅读您的参考资料,并尝试找出两者之间的深层联系/差异。
Hongjin Liang

您是否对“您显示程序P和模拟程序Q并且程序Q可以模拟程序P并且您有双重模拟”这样的陈述确定?”?令A =(a。(b + c))+(a.b + ac)和B = a.b + ac时,据我所知,A与B相似,B与A相似,但A和B不是双相似的。
安德拉斯·萨拉蒙

@安德拉斯:你是对的。我的发言不够精确。短语“可能存在一些其他条件”抽象化了区别。
戴夫·克拉克

Hennessy和Milner在他们的原始论文中定义了三种等价关系进行双仿真,并给出了一些例子来说明它们之间的差异。您最初的陈述实际上是他们论文中的陈述,它比双模拟要弱,比痕量对等要强。我不确定哪个等效更好。也许取决于实际用途。
Honghong Liang

仿真还用作在两种数据类型之间建立数据细化的证明技术。这些模拟证明中的每一个都涉及整个程序类别。有关详细信息,请参见eg [1]。这表明这两个概念之间的区别甚至更加模糊。[1]:CAR Hoare,He J和JW Sanders。数据优化中的预规范。信息处理快报,25:71-76,1987.

8

两种类型的关系似乎在不同的上下文中使用。处理过渡系统上解释的过程计算或模态逻辑时,针对类型化语言的逻辑模拟和模拟关系。戴夫·克拉克(Dave Clarke)提供了许多直观的解释,因此我只添加一些可能会有所帮助的指针。

已经进行了使用抽象解释来表征这两个概念的工作。可能不是您想要的,但是至少两个概念都在同一个数学框架中处理。

萨姆森·阿布拉姆斯基(Samson Abramsky)使用逻辑关系证明了惰性Lambda演算(抽象解释,逻辑关系和Kan扩展)的正确性和严格性分析的终止。他还表明,逻辑关系在Galois连接的抽象解释意义上定义了抽象功能。最近,Backhouse和Backhouse展示了如何从基本类型的Galois连接构造高阶类型的Galois连接,并且可以使用逻辑关系(逻辑关系和Galois连接)等效地描述这些构造。因此,在类型化功能语言的特定上下文中,这两个概念是等效的。

仿真关系描述了针对各种模态和时间逻辑的Kripke结构之间的属性保留。除了类型,我们在逻辑上有模态。模拟关系还定义了Galois连接,因此也定义了抽象。可以问这些抽象是否具有特殊的属性。答案是标准抽象是合理的,而基于仿真关系的抽象是完整的。完整性的概念是针对Galois连接的,这可能与直观的解释不一致。这项工作是由David Schmidt(程序抽象的结构保留二进制关系)以及Francesco Ranzato和Francesco Tapparo(抽象解释的广义强保存)开发的。


您的答案对于将概念与抽象解释联系起来非常有帮助。谢谢!
Hongjin Liang

一个真诚的问题:我不是专家,但是雷诺兹(1983,“类型,抽象和参数多态”)是否已经定义了Galois连接的逻辑关系(第6节)?我注意到的唯一区别是:他没有说“ Galois连接”一词,而是说了等价的“被视为类别的部分订单之间的伴随函子”,并且他只限于域。OTOH,Backhouse和Backhouse引用了雷诺(Reynolds)的观点,但没有讨论这一说法。
Blaisorblade 2015年

6

我想说这两个概念有些含糊。两者都是关于计算机制的二进制关系,它们以某种方式体现了平等的概念。逻辑关系由类型结构的归纳定义,而模拟可以根据需要定义,但该术语暗示共归。

π


您的参考非常好!我之前从未听说过并发程序的逻辑关系。谢谢!我猜想定义逻辑关系的困难在于查找类型结构。使用相同的类型结构,可以在不同的编程语言之间定义逻辑关系。另一方面,仿真需要通过状态转换系统对程序进行建模,如果为不同的状态模型编写程序,则可能会感到不容易。
Honghong Liang

你好!是的,找到合适的类型结构可能并不总是那么容易。您可以为要比较的两个结石使用不同的过渡系统来定义模拟。有人可能会说弱模拟的定义就是这样做的。定义模拟的真正需要要做的是比较过渡标签的关系。
Martin Berger
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.