Prologに関して

Prolog

今後、小屋畑ソフトウェアサービスではProlog言語と関連技術に力を入れてゆきます。

Prologは、日本では昔第五世代コンピュータプロジェクトで採用されていた古い人工知能用言語です。

 第五世代コンピュータプロジェクトは成功したとはいえず、現在国内でもPrologは下火です。

 しかし、その後制約論理プログラミング(CLPFD)や帰納論理プログラミング(Alephなど)を初めとした注目すべき新しい技術が論理プログラミング(Prolog)より生まれ、スケジューリング問題や機械学習などにおいて興味深い結果を出し始めています。

 Prologと関連技術に関する研究は弊社ブログに都度投稿しておりますが、いつか折を見て整理した状態でまとめようと思っております。

制約論理プログラミング

     

    ・制約論理プログラミングに関して

     制約論理プログラミングとは、変数同士の関係を「制約」という関係式で記述しておくと、その制約を満たす値を自動的にプログラムが探してくれる技術です。 変数の範囲や値が更新されるたび、関係のある変数の範囲がドミノ倒しのように更新されてゆき、範囲を自動的に絞り込んでいきます(制約伝搬)

     通常の手続き型言語ではループで値を生成しチェックするという探索のプログラムを書かないといけないところが、制約論理プログラミングでは条件のみの記述で済むためプログラムが非常にコンパクトで読みやすいものになるという特徴があります。

帰納論理プログラミング

 帰納論理プログラミングとは、例えばプログラムにとって現在意味不明な「AはBの孫である」という言葉(述語)があるとして、この関係を満たす事実(及び満たさない事実)をたくさん与えプログラムに学習させることにより、「AとBがどのような関係のときに"AがBの孫である"といえるか」をプログラムが自分で理解するという技術です。

 例えば以下の事実を与えるとします


○背景事実(前提知識のようなもの)
・aはbの子である
・cはaの子である
・eはfの子である
・iはjの子である
・uはjの子である
・pはuの子である


○正事例(学習させたい事実を満たす例を与える)

・cはbの孫である
・pはjの孫である

○負事例(事実を満たさない例を与える)

・aはfの孫である
・jはbの孫である
・pはpの孫である

 これらの事実を与えて帰納論理ライブラリを用いて学習させると「AがBの孫である」というのは「Aは誰かわからないがXの子であり、しかもこのXはBの子である」という、「背景知識を用いた関係性」をプログラムが自ら生み出し、理解します。