Skip to main content
QUICK REVIEW

[論文レビュー] More declarative tabling in Prolog using multi-prompt delimited control

Samer Abdallah|arXiv (Cornell University)|Aug 23, 2017
Logic, programming, and type systems参考文献 7被引用数 3
ひとこと要約

この論文は、ジョンソンの関数型メモ化パーサー組み合わせ子にインspiredされた、マルチプロンプトデリミテッド制御を用いた、Prologテーブルリングのより宣言的なアプローチを提示する。最小限のコード量でインクリメンタルな解決策の提供を達成し、最適化済みの既存システムと比較して2倍以内のパフォーマンスを実現する。SWI Prologにおける継続ベースの制御演算子を用いることで、Prologの宣言的スタイルを保持する。

ABSTRACT

Several Prolog implementations include a facility for tabling, an alternative resolution strategy which uses memoisation to avoid redundant duplication of computations. Until relatively recently, tabling has required either low-level support in the underlying Prolog engine, or extensive program transormation (de Guzman et al., 2008). An alternative approach is to augment Prolog with low level support for continuation capturing control operators, particularly delimited continuations, which have been investigated in the field of functional programming and found to be capable of supporting a wide variety of computational effects within an otherwise declarative language. This technical report describes an implementation of tabling in SWI Prolog based on delimited control operators for Prolog recently introduced by Schrijvers et al. (2013). In comparison with a previous implementation of tabling for SWI Prolog using delimited control (Desouter et al., 2015), this approach, based on the functional memoising parser combinators of Johnson (1995), stays closer to the declarative core of Prolog, requires less code, and is able to deliver solutions from systems of tabled predicates incrementally (as opposed to finding all solutions before delivering any to the rest of the program). A collection of benchmarks shows that a small number of carefully targeted optimisations yields performance within a factor of about 2 of the optimised version of Desouter et al.'s system currently included in SWI Prolog.

研究の動機と目的

  • デリミテッド制御演算子を活用することで、低レベルのエンジン変更や複雑なプログラム変換を避けて、Prologテーブルリングをより宣言的な方法で実装すること。
  • すべての解決策が列挙された後にのみ結果が返却されるのではなく、テーブルリング述語からの解決策を段階的に提供できること。
  • コードの単純さとPrologの宣言的コアに忠実であることを保ちながら、既存の最適化済みテーブルリングシステムと競合可能なパフォーマンスを達成すること。
  • 限定的な最適化の最小限のセットを用いることで、現在のSWI Prologテーブルリング実装と比較して2倍以内のパフォーマンスを達成できることを示すこと。

提案手法

  • ジョンソンの関数型メモ化パーサー組み合わせ子を、継続渡しスタイルとデリミテッド制御を用いて、純粋で宣言的なPrologに翻訳すること。
  • SWI Prologのマルチプロンプトデリミテッド制御演算子(Schrijversら、2013年)を用いて、計算スレッドを一時停止・再開可能にし、効率的なメモ化とテーブルリングを実現すること。
  • `table`ディレクティブによる浅いプログラム変換を導入し、述語名を変更し、`cctable/1`メタコールで呼び出しをラップすることでテーブルリング動作を実現すること。
  • SWI Prologの`rbtrees`を介して赤黒木を用い、ストア抽象化を用いてメモ化テーブルと可変状態を制御的に管理すること。
  • キーリユースや効率的な参照管理といった、宣言的スタイルを損なわずにパフォーマンスを向上させるためのターゲット最適化を適用すること。
  • バリアントベースのキーマッチングを可能にする`tries`ライブラリを活用し、変数を含む項に対しても正しくメモ化が動作することを保証すること。

実験結果

リサーチクエスチョン

  • RQ1低レベルのエンジンサポートなしに、高レベルの制御演算子のみを用いて、Prologにおけるテーブルリングをより宣言的に実装できるか?
  • RQ2デリミテッド制御を用いることで、テーブルリングPrologにおいてインクリメンタルな解決策の提供が可能になり、非決定的クエリの応答性が向上するか?
  • RQ3継続ベースのテーブルリングシステムのパフォーマンスは、高度に最適化された低レベルのSWI Prologテーブルリング実装と比較してどの程度か?
  • RQ4最小限のコードベースと宣言的スタイルを保ちながら、競争力のあるパフォーマンスを達成できる範囲はどの程度か?

主な発見

  • 提案されたテーブルリングシステムは、解決策を段階的に提供し、全解決策の列挙を待たずに結果への早期アクセスを可能にする。
  • 従来の継続ベースのアプローチと比較して、大幅に少ないコード量で実装されており、Prologの宣言的コアにずっと近い形を保っている。
  • わずかな数のターゲット最適化を施すだけで、現在の最適化済みSWI Prologテーブルリング実装と比較して約2倍以内のパフォーマンスを達成している。
  • マルチプロンプトデリミテッド制御の使用により、計算スレッドの効率的な一時停止と再開が可能となり、OLDTおよびSLG解釈の挙動を効果的にモデル化している。
  • 継続ベースのメモ化を活用することで、左再帰的および非決定的述語を正しく処理でき、イーリー推論や関数型パーサー組み合わせ子と同様の挙動を示す。
  • `table/1`ディレクティブによる浅いプログラム変換により、既存のPrologコードとの透明な統合が可能になり、モジュール性と使いやすさが保たれている。

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

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

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

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