Prologと論理学と人工知能と | SiTest (サイテスト) ブログ

メニューボタン閉じるボタン

Prologと論理学と人工知能と

こんにちは、プロダクト開発チーム エンジニアの森永です。

先日の記事「人工知能の開発と相性の良いプログラミング言語3選」では、人工知能と相性が良いとされるプログラミング言語としてLISP、Prolog、そして弊社のSiTestで用いられているLiveScriptを紹介いたしました。

記事の最後に「他にも人工知能のプログラミングでは様々なプログラミング言語が使用されております」と書きましたが、その中でも今回はPrologにスポットを当て、論理学、人工知能との関連性、そして最近の動向や今後の可能性を考察してまいります。

Prologとは

Prologとは、1972年ごろにフランスのアラン・カルメラウアーとフィリップ・ルーセルによって考案されたプログラミング言語です。語源はフランス語で論理プログラミングを表す「programmation en logique」(英語にすると「programming in logic」)に由来しています。

Prologイメージ

その名前の由来の通り、Prologは論理式をプログラムの形にした構文で構成されています。

例えば、「奇数は数字である」は以下のように書くことができます。

number :- odd.

「数字←奇数」を英数字と記号のみの表記にすると上記のようになると考えればわかりやすいかと思います。
同様に「1は奇数である」は

odd :- 1.

と表記できます。
そこで、1は数字であるかどうかをPrologのプロンプトで入力すると

?- number(1).
true

と、true(真)が返されます。

次に、変数Xに入る答えを探索するサンプルを紹介します。
猫2匹にtama、mike、犬2匹にtaro、pochiと名前が付けられていることを以下のように定義します。

name(cat,tama).
name(cat,mike).
name(dog,taro).
name(dog,pochi).

プロンプトでXに入る猫の名前を調べるには以下のように入力します。

?- name(cat,X).
X = tama;
X = mike.

一つ目の答え「tama」が出た時にセミコロン+Enterを入力すると、再び質問部に戻って(これをバックトラックと言います)別の答えを探し、「mike」を出力します。

このように、論理学および探索を用いてプログラムの処理を行うため、エキスパートシステムなどの知識処理を中心に古くからPrologを用いた研究が行われ、大学等の情報基礎の授業で学ばれる方もおられるかと思います(実際私も大学でPrologを用いた処理を授業で学びました)。

論理学と人工知能

最も簡単なPrologのプログラム例を示しましたが、このような「論理学」ははるか昔、それこそ古代ギリシャの時代から存在する最も古典的な思考方法の一つでありました。従い、人工知能研究も論理学的な思考から始まったと言っても過言ではありません。

人工知能による推論や学習にはいろいろな方法がありますが、そのいずれも論理的な思考に基づいています。人間は「えいやあっ」と答えを出すこともありますが、人工知能の場合は(今のところ)そのようなことはなく論理的に答えを導くので、Prologによる論理プログラミングはある意味人工知能の基本と言っても良いでしょう。

Prolog、論理学、そして人工知能の今後

学術、研究分野では盛んだった(私も大学時代にこの言語を知りました)ものの実用性としてはなかなか日の目を見ることがなかったPrologですが、近年IBMのWatsonやソフトバンクのPepperで推論エンジンに採用されたとの話題も出ており再び注目度が上がってきたと言えるでしょう。

今後も論理的思考を要するところ、知識からの推論を要するところで用いられていく可能性は十分あるので、Prologの存在を頭に入れておくと良いかと思います。