Skip to main content
QUICK REVIEW

[論文レビュー] Using Structural Recursion for Corecursion

Yves Bertot, Ekaterina Komendantskaya|ArXiv.org|Mar 23, 2009
Logic, programming, and type systems参考文献 7被引用数 6
ひとこと要約

この論文は、Coq などの構成型理論に基づく定理証明器において、'map' のような関数が再帰呼び出しの中で現れるためにガード条件を満たさない再帰的方程式に対しても、構造的再帰を用いてコリカーシブなストリーム値を体系的に定義する手法を提示している。ストリームを自然数への関数として符号化することで、標準的なガード付きコリカーシブ性ルールによって拒否されるべき無限データ構造の形式的検証が可能になり、高階の再帰原理に依存せずに定義可能なコリカーシブ関数のクラスが拡張される。

ABSTRACT

We propose a (limited) solution to the problem of constructing stream values defined by recursive equations that do not respect the guardedness condition. The guardedness condition is imposed on definitions of corecursive functions in Coq, AGDA, and other higher-order proof assistants. In this paper, we concentrate in particular on those non-guarded equations where recursive calls appear under functions. We use a correspondence between streams and functions over natural numbers to show that some classes of non-guarded definitions can be modelled through the encoding as structural recursive functions. In practice, this work extends the class of stream values that can be defined in a constructive type theory-based theorem prover with inductive and coinductive types, structural recursion and guarded corecursion

研究の動機と目的

  • Coq や類似の定理証明器において、再帰呼び出しが関数の内側にあると、ガード条件を満たさないためコリカーシブ定義が拒否されるという制限に対処すること。
  • 『コンストラクタによってガードされる』基準を満たすものに限らない、より広いクラスのコイントダクティブストリームを定義可能にするために拡張すること。
  • 生産的コリカーシブ関数を定義するための、well-founded 再帰や複雑なコインダクティブ述語に代わる、文法的で体系的かつ軽量な代替手段を提供すること。
  • 自然数のストリームやフィボナッチ数列といった無限データ構造を含む関数的プログラムの形式的検証を、構造的再帰とガード付きコリカーシブ性のみを用いて可能にすること。

提案手法

  • 各ストリームを自然数から値への全関数にマッピングし、ストリームと関数の間で可逆な対応関係を確立する。
  • 自然数インデックスにおける構造的再帰を用いてコリカーシブストリーム値を定義し、非ガード型の再帰的方程式を構造的再帰関数に変換する。
  • 標準的な Coq の 'Function' コマンドを用いて、自然数上の関数を構造的再帰で定義し、構造的再帰による終了性を保証する。
  • 上り上げ操作(論文では '⟨ ⟩' で表記)を用いて関数からストリームを再構築し、得られたストリームが元の再帰的方程式を満たすことを保証する。
  • 関数 'map' や 'merge' が、インデックスベースの再帰に翻訳された際にも元のストリーム定義の意味を保持するように符号化可能であることに着目する。
  • Coq の組み込み推論メカニズムを用いて、結果のストリームが元の再帰的方程式を自動的に満たすことを証明する。

実験結果

リサーチクエスチョン

  • RQ1関数適用(例:'map' や 'merge')が含まれることでガード条件を満たさないコリカーシブストリーム定義が、構成型理論の文脈で形式的に検証可能か。
  • RQ2構造的再帰と標準的なガード付きコリカーシブ性のみを用いて、このような非ガード型コリカーシブ定義をモデル化できるか。
  • RQ3自然数上の関数としてのストリームの可逆な符号化が、そうでない場合に証明支援システムによって拒否される無限データ構造の形式的検証を可能にするか。
  • RQ4この手法が、元の仕様の意図された計算的挙動と計算量を保持するか、それとも非効率なオーバーヘッドを引き起こすか。

主な発見

  • この手法は、自然数のストリームやフィボナッチ数列といったコリカーシブストリームを、元の式がガード条件を満たさない場合であっても構造的再帰を用いて正しく定義できた。
  • このアプローチは体系的であり、複雑なコインダクティブ型や特化された述語の導入を必要とせず、先行研究よりも単純である。
  • 得られたストリーム値は、Coq が提供する自動証明メカニズムにより、元の再帰的方程式を満たすことが形式的に証明された。
  • この手法は 'dTimes' のような複数のストリーム引数と再帰的組み合わせを含む関数に対しても適用可能であり、スケーラビリティを示した。
  • しかし、'merge' を含むハミング数列のような定義では、'merge' 関数に適切な形のずらし補題(form-shifting lemma)が存在しないため、この手法では処理できない。
  • 構造的再帰モデルから抽出されたコードは、元の仕様よりも計算量が悪化する(例:フィボナッチでは指数的)可能性があるため、効率性を考慮する際には元の仕様を実装として使用すべきである。

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

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

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

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