Nonstandard Axiomatic Semantics
本文证明了基于霍尔逻辑的公理语义存在类似于斯科莱姆模型的非标准模型,从而导致无法唯一地定义操作语义,并提出通过增加额外的证明义务来丰富该系统,从而在不影响标准轨迹模型的情况下解决这一歧义性。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
在计算机科学领域,存在着一种持续的张力:即我们如何描述一个程序应该做什么,以及我们如何证明它确实做到了这一点。几十年来,研究人员一直依赖一种被称为霍尔逻辑(Hoare logic)的系统来验证软件。这个系统运作起来就像一套逻辑规则:如果一个程序处于某种初始状态,并且我们可以证明它遵循了特定的步骤,那么它必然会结束于一个期望的状态。这是一个强大的工具,用于确保代码没有错误,就像数学证明确保定理为真一样。然而,正如数学家曾经发现他们计算数字的规则可能会意外地描述出奇怪且不可能的世界一样,计算机科学家也发现,验证程序的规则也可能描述出程序运行的各种不可能方式。问题在于,我们用来信任软件的逻辑是否真的足够精确,能够排除这些不可能的场景。
纽约大学的一位研究人员最近表明,标准的程序验证规则确实过于宽松。他们证明了用于证明程序正确性的逻辑允许“非标准”的模型执行。简单来说,这意味着这些规则允许程序以在逻辑上数学可行、但在现实世界中物理上不可能的方式运行。想象一个不断计数上升的程序。标准的观点是它从零开始,依次变为一、二、三,以此类推,永不停止。然而,该逻辑还允许这样一个版本的程序:它在我们开始观察之前,已经在过去运行了无限长的时间;或者它存在于一个与我们对时间的正常理解不符的奇异延伸时间线中。研究人员证明,当前的逻辑无法区分程序的正常预期行为与这些奇异的非标准行为。这是一个重大问题,因为如果逻辑无法区分真实世界与这些不可能的世界,它就无法唯一地定义一个程序究竟在做什么。
要理解为什么会发生这种情况,必须观察计算机程序中的循环是如何被验证的。当一个程序重复执行一段代码块时(例如一个在条件为真时持续运行的循环),逻辑要求一个“循环不变式”(loop invariant)。这是一个在每次循环重复时都保持为真的陈述。研究人员表明,对于许多程序,你可以发明一个循环不变式,它对于代码的标准正常执行是成立的,但对于这些奇怪的非标准执行同样成立。例如,考虑一个向上计数的程序。逻辑允许一个关于从零开始向上计数的证明,但也允许一个关于从负无穷大开始向后倒计数的证明,或者一个存在于人类无法感知的额外隐形步骤中的时间线上的证明。因为逻辑将这些不同的时间线视为有效的,它就无法锁定程序唯一的含义。这种逻辑是模棱两可的,就像一种旧的数字定义,允许存在一些虽然表现得像普通数字、但不属于标准计数序列的“幽灵”数字。
这篇论文不仅指出了这种歧义性,还提供了一种修复方法。研究人员提议在验证过程中增加额外的要求,其灵感来自于用于证明程序最终会停止运行的方法。这些新的要求充当了一个过滤器。它们要求程序的正确性证明还必须展示程序的执行遵循一条特定的、标准的路径通过时间。具体而言,新规则要求如果你去计算循环的步数,这个计数必须遵循我们日常使用的标准数字递增过程,而不包含任何隐藏的、无限的延伸。如果一个程序的行为依赖于那些奇怪的非标准时间线,新规则将无法证明其正确性。这有效地迫使逻辑忽略那些不可能的世界,转而关注我们所关心的标准、现实世界的执行。
至关重要的是,研究人员表明,对于任何表现正常的程序,这些新要求都会被自动满足。这意味着对于目前人们进行的绝大多数软件验证工作,现有的证明仍然有效且无需更改。新规则并不会增加证明程序正确性的难度(针对标准情况而言);它们只是关闭了允许不可能情况溜进来的后门。其结果是提供了一个更精确的程序含义定义。通过添加这些额外的检查,逻辑终于成为了程序行为的唯一描述,确保当我们说一个程序是正确的时候,我们谈论的是它运行的一种特定的方式,而不是包括了一些违背我们对时间或序列理解的可能现实的集合。
这项工作将数学基础中的深层问题与编写安全软件的实际任务联系了起来。正如数学家曾经通过完善数字定义来排除不可能的变体一样,这项研究也精炼了程序执行的定义。它确保了我们用于验证关键系统安全性的工具不仅在逻辑上是一致的,而且也植根于计算机实际运行的单一标准现实之中。这个解决方案之所以优雅,是因为它不需要重写整个验证系统;它只是添加了一个护栏,让逻辑保持在预定的路径上,确保我们对软件的信心是基于一个唯一且定义明确的真相。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。