Prolog:論理プログラミング言語
Prologは、一階述語論理とホーン節に基づく宣言型プログラミング言語です。ユニフィケーション、バックトラッキング、AI、自然言語処理、記号的推論での利用で知られます。
Prolog(「Programming in Logic」の略)は、明示的な制御フローではなく、関係、規則、問い合わせによって計算を表現する高水準の宣言型プログラミング言語である。プログラムは関係を記述する事実と規則の集合として記述され、システムはそれらの宣言から事実を導出しようとすることで質問に答える。Prologは一階述語論理に基づいており、記号処理および規則ベースシステムで最も広く使われている論理プログラミング言語と広く見なされている。
中核的な特徴
Prologのプログラムは、段階ごとの命令を与える代わりに、何が真であるかを述べ、実行系にその帰結を推論させる。主な仕組みには次のものがある。
- 事実と規則:parent(alice,bob). のような単純な表明、および関係が成立する条件を定義する含意形式の規則である。
- ユニフィケーション:項を同一にするよう変数を束縛するパターン照合の手続きであり、問い合わせにおける引数の受け渡しを可能にする。
- バックトラッキングと探索:複数の規則または事実が問い合わせを満たし得る場合に代替案を体系的に探索し、失敗時には自動的にバックトラックする。
- 失敗としての否定:多くのPrologシステムで用いられる実用的な非古典的否定の形態である。ある目標を証明できない場合、その否定を仮定する。一般に失敗としての否定として論じられ、厳密な論理的否定と対比される。
Prologプログラムの形式と動作
プログラムはホーン節、すなわち正リテラルを高々一つしか持たない含意からなる。文章で簡単な例を示すと、アリスはボブの親であり、ボブはキャロルの親であるという事実と、ある人が親であるか、または祖先の親であるならば祖先であるという規則を記述できる。「アリスはキャロルの祖先か」と問われると、Prologエンジンは証明を見つけるか可能性を尽くすまで、ユニフィケーションと規則の適用を試みる。これらの節と解決に基づく証明探索により、Prologには宣言的な意味と、実行時に用いられる手続き的な解釈の両方が与えられる。したがって、ホーン節はこの言語の基礎である。
起源と発展
Prologは1970年代初頭、自然言語処理と記号計算へのアプローチとして、アラン・コルメローとその共同研究者らによって開発された。論理に基づく証明探索を研究する研究者たちは、その理論的基礎と形式化に貢献した。誕生以来、多数の実装と方言を通じて発展してきたほか、制約論理プログラミング(CLP)などの拡張により、数値領域や制約付き探索へと適用範囲が広がった。現代のシステムは、ライブラリ、他言語インターフェース、開発およびデバッグ用のツールを提供している。
応用と重要性
Prologは、人工知能研究、エキスパートシステム、定理証明、計算言語学、知識表現において歴史的に重要な役割を果たしてきた。その強みは、事実のデータベース、パターン照合、記号的推論、規則ベースの推論、推論エンジンの試作といった、関係と規則によって自然に記述できる問題にある。教育の場では、宣言型プログラミング、論理、形式的推論を教えるためにしばしば用いられる。
際立つ特徴と実用上の注意
命令型言語とは異なり、Prologは関係がどのように成立するかを明示するよりも、どの関係が成立するかを重視する。ただし、節の順序や実行モデルの詳細、たとえば深さ優先探索やバックトラッキングは、性能と動作に影響する。この言語はチューリング完全で柔軟だが、意図しない結果を避けるためには、特に失敗としての否定などの側面に注意が必要である。より技術的な入門や参考資料については、論理プログラミングに関する資料、およびアラン・コルメローとこの言語の発展に関する解説を参照できる。
実践的に始めたい読者は、小規模なPrologシステムを試し、簡単な事実、規則、問い合わせを使って、ユニフィケーションとバックトラッキングを直接観察するとよい。多くのチュートリアルと実装ガイドがオンラインおよび教科書で利用できる。意味論、実装戦略、現代的な変種についての追加の背景や比較的な議論は、入門資料および研究資料を通じて参照できる。
著者
AlegsaOnline.com Prolog:論理プログラミング言語 Leandro Alegsa
URL: https://ja.alegsaonline.com/art/79414