[论文解读] An Abstract Programming System
本文提出 PL 系统,可将程序正确性的抽象证明自动翻译为多种编程语言中的正确且高效的程序。通过使用经典逻辑与 Scott-Strachey 语义学,该系统能够生成带副作用和破坏性更新的已验证指令式程序,通过形式化验证确保正确性,并将代码翻译至多种目标语言,而无需从头重写。
The system PL permits the translation of abstract proofs of program correctness into programs in a variety of programming languages. A programming language satisfying certain axioms may be the target of such a translation. The system PL also permits the construction and proof of correctness of programs in an abstract programming language, and permits the translation of these programs into correct programs in a variety of languages. The abstract programming language has an imperative style of programming with assignment statements and side-effects, to allow the efficient generation of code. The abstract programs may be written by humans and then translated, avoiding the need to write the same program repeatedly in different languages or even the same language. This system uses classical logic, is conceptually simple, and permits reasoning about nonterminating programs using Scott-Strachey style denotational semantics.
研究动机与目标
- 实现从抽象证明系统化生成任何 PL 可行编程语言中正确程序的目标。
- 支持生成具有破坏性赋值与副作用的高效指令式程序,这对于现实算法实现至关重要。
- 将程序正确性证明与实现细节解耦,实现已验证逻辑在不同目标语言间的复用。
- 提供一个形式化框架,使 $L^*$ 中的抽象程序可通过有效函数翻译为任何 PL 可行语言的正确代码。
- 支持使用经典逻辑与指称语义学对非终止与非确定性程序进行推理。
提出的方法
- 系统使用经典逻辑与 Scott-Strachey 域理论建模程序语义,支持对非终止与非确定性行为的推理。
- 定义了一种带指令式特性的抽象编程语言 $L^*$,包括赋值与副作用,用于建模如快速排序等高效算法。
- 针对每种目标语言 $L$,系统定义了公理 $PL(L)$,规定 $L$ 成为 PL 可行语言的最小要求,确保翻译的正确性。
- 引入关系 $R_f$ 将程序变量与其语义关联,支持在证明中直观指定前置与后置条件。
- 通过关系 $R_i^k$ 对有界子数组大小进行归纳推理,支持对快速排序等递归程序的正确性证明。
- 有效函数将 $PL^*$ 或 $L^*$ 程序的证明映射为任何 PL 可行语言中的正确代码,支持与语言无关的程序生成。
实验结果
研究问题
- RQ1如何将单一抽象正确性证明系统化地翻译为多种编程语言中的正确程序?
- RQ2编程语言需满足何种形式化条件,才能成为从抽象证明翻译的有效目标?
- RQ3能否在基于证明的程序生成系统中正式集成如破坏性赋值与副作用等指令式特性?
- RQ4如何在经典逻辑框架内对非终止与非确定性程序进行推理,以支持程序验证?
- RQ5抽象编程语言在实现跨多种实现语言的可复用已验证代码生成中扮演何种角色?
主要发现
- 系统成功将 $PL^*$ 中的抽象证明翻译为任何 PL 可行语言中的正确高效程序,包括指令式、函数式与逻辑式编程语言。
- 通过 $R_{qs}(Q)$ 等关系形式化证明了快速排序算法的正确性,该关系表明最终数组为输入的有序排列。
- 证明结构基于 $R_i^k$ 关系实现有界递归,支持对子数组大小的归纳推理,确保有限输入下的终止性。
- 快速排序的最终程序不包含分区例程,可被任意已验证实现替换,体现了模块化与可复用性。
- 系统通过在抽象语言中直接建模破坏性更新与副作用,支持高效代码生成,实现对现实算法的准确表达。
- 该框架同时支持形式化正确性证明与实际代码生成,且可在翻译前通过测试或其他手段验证抽象程序。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。