[論文レビュー] 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$に対して、$L$がPL対応であるために満たすべき最小限の要件を規定する公理$PL(L)$を定義し、翻訳の正しさを保証する。
- プログラム変数とその意味論を関連付ける関係$R_f$を導入し、証明における事前条件および事後条件の直感的な指定を可能にする。
- 関係$R_i^k$を用いた、部分配列サイズの上限に基づく帰納的推論により、クイックソートのような再帰的プログラムの正当性を証明する。
- 効果的関数を用いて$PL^*$または$L^*$プログラムの証明を、任意のPL対応言語での正しいコードにマッピングし、言語に依存しないプログラム生成を支援する。
実験結果
リサーチクエスチョン
- RQ11つの抽象的正当性証明を、複数のプログラミング言語に跨る正しく効率的なプログラムに体系的かつ一貫して翻訳する方法は何か?
- RQ2翻訳のための有効なターゲット言語として、プログラミング言語が満たすべき形式的条件は何か?
- RQ3破壊的代入や副作用といった命令型特徴を、証明に基づくプログラム生成システムに形式的に統合できるか?
- RQ4クラシカル論理の枠組み内で、非終了および非決定的プログラムをどのように推論できるか?
- RQ5抽象的プログラミング言語は、多様な実装言語に跨る再利用可能な検証済みコード生成をどのように可能にするか?
主な発見
- システムは、$PL^*$における抽象的証明を、命令型、関数型、論理型プログラミング言語を含む、任意のPL対応言語への正しい効率的プログラムに成功して翻訳した。
- クイックソートの正当性は、$R_{qs}(Q)$のような関係を用いて形式的に証明され、最終的な配列が入力の順列でありかつソート済みであることを指定する。
- 証明構造は、$R_i^k$関係による境界付き再帰を用いており、部分配列サイズに対する帰納的推論を可能にし、有限入力に対して終了性を保証する。
- クイックソートの最終プログラムにはパーティションルーチンが含まれないが、これは任意の検証済み実装に置き換え可能であり、モジュラリティと再利用性を示している。
- システムは、破壊的更新と副作用を抽象言語に直接モデル化することで、効率的なコード生成を可能にし、現実的なアルゴリズム表現を可能にした。
- この枠組みは、形式的正当性証明と実用的コード生成の両方を可能にし、翻訳前の抽象プログラムの検証にテストや他の手段を用いる選択肢も提供する。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。