見出し画像

prolog - カット、カット!

今年はAIの話題が花盛りですが、人工知能ブームは過去にも何度となく繰り返されています。その中で1980年代から90年頃にかけて国家プロジェクトとして行われた第五世代コンピュータといわれた人工知能を実現するための研究というのがありました。

第五世代コンピュータ

この時に人工知能を記述するプログラミング言語として注目されたのが Prolog です。この言語は一階述語論理と呼ばれる論理を記述し、この論理を元に命題に対して論理をパターンマッチングさせながら成立するか調べるという動作をします。

なかなかわかりにくいですが「りんごは赤い」などの事実を記述した上で「赤いものは」と尋ねると「りんご」と答えてくれるような感じで使います。

Prolog入門

どうしてこれでプログラムが書けて人工知能に繋がるのかは頭を捻らないとならないのですが、足し算と負の数を教えることで引き算ができるようになるみたいなコードを書いて「なるほど」と思った記憶はあります。

Prolog自身は、もっと古くから使われていて、それまでもっぱらLispで書かれていた人工知能に関するコードよりもわかりやすいということで、使われ始めていたのですが、先の第五世代コンピュータというのは、このPrologを効率よく実行するために開発されたという経緯もあり一大ブームとなりました。

Prolog

勘の良い方は気がつくとは思いますが、論理をツラツラと書き連ねて、そこから命題にマッチするかを調べていくのがパターンマッチングなんですが、複雑な論理になれば、ものすごい数の論理に対して成立するかを調べることになります。また場合によっては相反する命題にぶち当たって答えが出せなくするケースも出てきます。そこでカットオペレータと呼ばれる操作により、それ以上はマッチさせなくて良いという指示が出せるのですが、これが実に難解で私も未だにちゃんとした理解が出来ていないところでもあります。

Prologカットについて

Prologのカットオペレーターの動作

Prologを書く人にとって、このオペレータを適切に挿入することこそ腕の見せどころで、いずれにせよ論理を展開して意味を解釈するのは慣れていない人には至難の技でした。パターンマッチングといえば正規表現を扱う処理系では必ず出てくるのですが、どうもこの手の論理は苦手なものがあります。論理にしても文字列にしても構造を持たないものを扱うのは現実世界に良くある例外的なものに対して、うまく当てはめるのが辛いです。

Prolog

Prolog/言語仕様

ということで、論理を記述する言語というのが脚光を浴び、パソコンでも動作させられる処理系も登場したのですが、第五世代コンピュータのプロジェクトが終わるとともに急速に下火となり、もっぱら教育用の言語として生きながらえているようです。今ではAIといえばpythonを使うのが主流のようですが、Prologで培った述語論理をデータとして扱いやすく、コードでパターンマッチングを記述出来ることが役に立っているような気がします。無料で使える処理系も多くあるようですから、頭の体操に短いコードを書いてみると発見があるかもしれません。

ヘッダ画像は、いらすとや より
https://www.irasutoya.com/2014/04/blog-post_1180.html

#プログラミング言語 #Prolog #第五世代コンピュータ #AIブーム #一階述語論理 #カットオペレータ

この記事が気に入ったらサポートをしてみませんか?