★ 論理プログラミングとは?

プログラミングはその目的によってさまざまなパラダイム/言語が存在しますが、 論理プログラミングはこうした プログラミングパラダイムの一つで、主に人工知能の記述言語として使われます。 人間が行う論理的な推論は記号論理と呼ばれる 数学的手法を使って記述することができます。 論理プログラムにおいては、プログラムが論理式の集合で与えられ、 プログラムの計算が論理式からの導出 と呼ばれる推論によって行われます。 論理プログラミングが人工知能記述言語として使用される理由は、 こうした人間の論理的な推論が容易に実現できるという他にも 以下のような理由があります。

多くのプログラミング言語は手続き的であると いわれます。これは最初にどの手続きを実行し、次にどの手続きを実行するかといった 計算の手順(how)がプログラム中に記述されているということです。 これに対して、論理プログラミングはプログラムが 宣言的である特徴を持っています。これは、プログラム中には 使用される知識(what)のみが記述されており、それらを使ってどのように計算 を進めるかといった実行手順は一切記述されていないということです。 このように論理プログラミングでは、 プログラムの記述と制御が切り離されています(注†)。 宣言的プログラミング言語は手続き的プログラミング言語と比較すると、 プログラムの一部だけを取り出しても意味がある、あるいは プログラムの一部を削除しても全体として無意味になることはない、 といったメリットがあります。 例えば、Cなどの手続き的言語では、プログラムの一部を取り出しても その部分だけでは無意味であり、また全体のプログラムから一行削除するだけで、 全体として動作しなくなるといった問題があるわけです。

(注†)論理プログラミング言語Prolog には効率化のために実行制御機能が導入されている。

人間の頭の中に蓄えられた情報は宣言的です。即ち、ある断片的情報を 取り出してもそれ自体に意味があり、また、一部の情報を忘れてしまっても 頭の中が機能しなくなるということはありません。 論理プログラミングが人工知能の記述言語に適していると考えられるのは こうした理由があります。

★ 研究テーマについて

論理プログラミングが提唱されたのは1970年代で、 1980 年代には日本の第五世代コンピュータプロジェクトの 基本パラダイムとして採用され世界的な注目を集めました。 初期の論理プログラミングはホーン節と呼ばれる 確定的知識を使った演繹(えんえき)推論の機能しか持っていませんでしたが、 その後プログラムの表現能力、推論機能が拡張され、現在では 論理プログラミングに基づく多くの知識表現/推論パラダイムが存在します。 以下では、こうした最近の論理プログラミングにおける 私の研究テーマを簡単に紹介します。

 仮説・不確定・帰納論理プログラミング

仮説論理プログラミング(abductive logic programming) とは、論理プログラミングに アブダクションと呼ばれる仮説推論の枠組を 導入したものです。アブダクションとは、ある事象が観測されたときにその原因 となる仮説をプログラムから自動生成する推論です。 不確定論理プログラミング(disjunctive logic programming) とは、「A または B」のような不確定な情報を含むプログラムを扱う枠組です。 帰納論理プログラミング(inductive logic programming) とは、与えられた観測事象から一般規則を帰納的に 学習する機能を持つものです。 こうした3つの論理プログラミングの枠組は、従来の確定的知識に基づく 演繹機能しか持たない論理プログラミングの表現能力と推論機能を 拡張・強化するもので、人工知能における常識推論の 実現に向けてのアプローチといえます。

 解集合プログラミング

不確定・不完全な情報を含む論理プログラムは、一般に複数のモデル (プログラムを満たす解釈)を持ちます。このようなモデルのうち、極小なものを 極小モデルあるいは解集合と呼びます。 複数の解集合を持つプログラムでは、Prolog のようなトップダウン型の計算手続きは 一般に正確に機能しないことが知られています。 そこで解集合プログラミング(answer set programming)では、 プログラムの持つ複数の解集合をボトムアップに計算することによって、 プログラムから得られる推論結果を導きます。解集合プログラミングは論理プログラミングの 新しい計算パラダイムとして、近年、注目されています。

 意味論

プログラムの意味論とは、 プログラムの数学的な解釈を研究する学問です。 論理プログラムの意味は、プログラム中の論理式から導かれる結果によって 特徴付けられます。人間の知識を論理プログラムで記述したとすると、 そのプログラムの意味は、人間が知識を使って推論した結果に対応するわけです。
  プログラム           ←→  知識
  プログラムの意味   ←→  推論結果
プログラムが確定的な知識しか含まない場合は、そこから得られる推論結果は 容易に得ることができますが、プログラムが不確定・不完全な知識を含む場合には、 そこからどのような情報が導かれるかを決めることは難しい問題です。 これは人間が断片的な情報しか持ち合わせていない場合に、いかに経験的規則、 常識的推論を働かせて、判断・行動するかという問題に対応しています。 このようにプログラムが不確定・不完全な知識を含む場合に、 人工知能の常識推論を使って機械的に結論を導く方法を調べるのが 本研究のテーマです。

 プログラム変換

プログラム変換とは、 あるプログラムの構造を機械的に変形して別のプログラムに変換することです。 ここで、変換前のプログラムと変換後のプログラムとを比較したときに、 両者が意味的にどういう関係にあるかということが問題になります。 両者がもし同じ意味であるとすると、あるプログラム(知識)を別の意味的に等価な プログラム(知識)に変換する機械的な変換規則が存在することがいえます。 また、こうした変換によってプログラムをより良いものに変形していく ことも重要です。より良いプログラムとはコンピュータ上で効率的に処理される プログラムのことです。全く同じ計算を行うプログラムでも、書き方によっては 処理効率には大きな差が出てきます。プログラムの意味を保ちつつ、 より効率的なプログラムに変換することがプログラム変換の目標です。 人間が書いたプログラムをコンパイルして、コンピュータが実行可能なコードに 変換するのも、元のプログラムの意味を保ちつつ効率的に処理可能なコードに 変換するという意味でプログラム変換の一種といえます。

 演繹データベース

コンピュータが利用可能な形態で整理・蓄積されたデータの集まりを データベースと呼びます。 データの整理方法は種々ありますが、このうちデータが満たす関係に基づいて 整理したものを関係データベースといいます。

名前 所属
野茂 ドジャース
イチロー マリナーズ
松井 ヤンキース

関係データベースの例

さて、データベースはそこに蓄積されたデータを検索・利用することは出来ますが、 データを使って新しい事実を導き出すことは出来ません。 そこで、関係データベースに論理プログラミングの演繹推論機能を付加したものを 演繹データベースといいます。 演繹データベースは論理プログラミングを使って記述されますが、 その使用形態において一般に膨大なデータをいかに効率よく処理するかが 焦点になります。また、不確定なデータの扱い、データベースの更新問題なども 不確定論理プログラミングや人工知能における知識更新の問題と 密接な関係があります。

★ 論理プログラミング関連サイト


Maintained by Chiaki Sakama