Skip to main content
QUICK REVIEW

[論文レビュー] foetus -- Termination Checker for Simple Functional Programs

Andreas Abel|arXiv (Cornell University)|Jul 9, 2024
Formal Methods in Verification参考文献 7被引用数 16
ひとこと要約

foetusは、タプル、構造子、パターンマッチを備えた単純な関数型言語の終了性チェッカーを提供する。呼び出しを抽出し、呼び出しグラフを完成させ、関数パラメータのレキシカル順序を見つけることで実現される。

ABSTRACT

We introduce a simple functional language foetus (lambda calculus with tuples, constructors and pattern matching) supplied with a termination checker. This checker tries to find a well-founded structural order on the parameters on the given function to prove termination. The components of the check algorithm are: function call extraction out of the program text, call graph completion and finding a lexical order for the function parameters.

研究の動機と目的

  • foetusという単純な関数型言語の終了問題を動機づけ、形式化する。
  • 関数パラメータの良基づいた順序に基づく終了チェッカーを開発する。
  • 呼び出しグラフとその完成によって相互再帰を扱う。
  • 終了挙動を示す例を含む実用的なプロトタイプを提供する。

提案手法

  • プログラムのテキストから直接的および間接的な関数呼び出しを抽出して呼び出しグラフを構築する。
  • 推移的な呼び出しを捕捉するためにエッジを結合して呼び出しグラフを完成させる。
  • すべての再帰呼び出しで減少する関数パラメータのレキシカル(置換)終了順序を探索する。
  • 終了性を推論するために、呼び出し行列と完成過程を用いてアプローチを形式化する。
  • 代表的なfoetusプログラム(例:add、mult、sub、ack、fib)に対する終了決定をデモンストレーションする。
  • 終了を確立できない場合(またはチェッカーが非終了を報告する場合)の制限と特別なケースを説明する。

実験結果

リサーチクエスチョン

  • RQ1foetus関数の終了を、パラメータの構造的順序を用いてどのように決定できるか。
  • RQ2再帰呼び出しを捉えるために、呼び出し元–呼び出し先の関係をどのように表現し完成させるか。
  • RQ3特定の関数の再帰について終了を証明するのに十分な終了順序(置換)は何か。
  • RQ4複雑なまたは相互再帰的定義に直面したときの終了チェッカーの限界は何か。
  • RQ5具体的な例は、アプローチの能力と限界をどう反映するか。

主な発見

  • パラメータ上のレキシカル順序を示すことにより、いくつかの標準的な再帰定義(例:加算、乗算)に対して終了を証明する。
  • Ackermann型の再帰や特定のリスト処理関数(map、foldl、reverse)などのケースで終了を証明できる。
  • 特定の相互再帰や高階的パターンなど、レキシカル順序が呼び出しグラフ完成後に失敗する例で非終了を特定する。
  • 分割に関連する例は、終了が補助証明に依存する可能性を示す。補助関数(div’)が終了しない場合、外側の除算関数もチェッカーによって非終了と見なされる。
  • このアプローチは、終了するケースと非終了ケースの両方を強調し、呼び出しグラフの完成が verdict にどのように影響するかを示すプログラムのスペクトル全体にわたって示される。
  • 実装されたチェッカーは、呼び出しグラフの有限の完成と置換ベースの終了順序に依存して結論に至る。

より良い研究を、今すぐ始めましょう

論文設計から論文執筆まで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。