ウィキブックスに
言語仕様 関連の解説書・教科書があります。
ウィキブックスに
プログラム例 関連の解説書・教科書があります。
Prolog
パラダイム 論理プログラミング 登場時期 1972年 設計者 Alain Colmerauer 他 型付け 動的型付け 主な処理系 AZ-Prolog, BProlog, Ciao Prolog, ECLiPSe,GNU Prolog , K-Prolog, Open Prolog, Poplog, Prolog Cafe, Prolog.NET, P#, SICStus Prolog, Strawberry Prolog, SWI-Prolog, YAP-Prolog 影響を与えた言語 Erlang , KL0,ESP ,Guarded Horn Clauses ,KL1 ,Concurrent Prolog ,PARLOG ,Mercury (英語版 ) ,Oz ,Strand ,Visual Prolog (英語版 ) プラットフォーム クロスプラットフォーム 拡張子 .pl, .pro, .P テンプレートを表示
Prolog (プロログ)は論理プログラミング言語 の一つであり、該当分野で最もよく知られている論理型言語の代表格である。主に人工知能 研究や計算言語学 との関連性を持つ。定理証明 、エキスパートシステム 、自動計画 、自然言語処理 とも繋がりが深い。形式論理 である一階述語論理 を基礎にして、事実群と規則群の表現および関係 の観点に立った宣言型パラダイム に準拠しており、その関係 に則った質問によって計算が開始されるという性質を持つ。
Prologは、1972年にマルセイユ大学 のアラン・カルメラウアーとフィリップ・ラッセルによって開発された。フランス語の「pro grammation enlog ique 」がその名の由来である[ 1] 。Prologの誕生にはエディンバラ大学 のロバート・コワルスキが考案したホーン節 が大きく寄与している。カルメラウアーによる元祖版はマルセイユPrologと呼ばれている。その後、コワルスキの門弟のデヴィッド・ワーレンが1977年に改訂開発したエディンバラProlog(DEC-10 Prolog)が標準になってPrologは広く普及した[ 2] 。
1972年 ごろにフランス のアラン・カルメラウアーとフィリップ・ルーセルによって考案された[ 2] 。
成立の事情から、Prolog プログラムは論理式 とみなされ、その実行は述語論理 によって述語が定義された環境における定理証明に擬して解釈されることが多い。利用者は論理プログラミング の枠組みを、取り分け述語論理 を学習することで、この枠組みに極めて忠実なこの言語の基礎的な構造のほとんどを理解できる。その言語仕様はこの枠組み以外には考案者たちも含めてそれ以上の拡張をほとんど行っていないため、他のプログラム言語とは異なり、学習しなくてはならない概念や用語もまた、述語論理 のものだけでこと足りる。基本的に計算機科学の新しい概念や新しい手法とは無縁である。ただし、SWI-Prolog等の処理系では様々な機能拡張の試みが行われている。一階述語論理は型理論や操作的意味論の研究論文で多数用いられており、今後、再注目される可能性がある。
Prolog のプログラム は一階述語論理 に基づいてデータ間の関係を示す命題 として記述され、処理系がそれらに単一化 (ユニフィケーション )と呼ばれるパターンマッチング を施しながら、与えられた命題が成立するか再帰 的手続きによって探索している。
プログラムの実行は述語集合が定義された環境の元で、質問することによってなされるが、これは反駁という述語論理的な証明過程を模して、処理系が用意する導出木と呼ばれるグラフをたどって解を得る過程である。Prolog のもととなるこの演繹 手法は導出 と呼ばれ、自動定理証明 の研究においてProlog 開発以前からよく知られていた。Prolog は、導出において節を頭部が一つの命題からのみなるホーン節 に限定したもので、この場合の導出をSLD導出 (Selective Linear resolution for Definite clause)と呼ぶ。ホーン節に限定しているということは、つまり、Prolog は任意の述語をそのまま扱えるわけではない。Prolog が述語の形式をホーン節に限定した理由は、もし頭部に項の連言 を認めるならば、導出時の計算量が爆発的に増大して、全ての解を得ることの保証が難しくなることが必至だからである。
述語論理を論理的な背景に持つことによって、Prolog のプログラムはその正しさを確認することが比較的容易である。同時に、プログラマはProlog でプログラミングすることが何を意味するかを明確に理解した上で、プログラムを書いていくことができる。
上記はProlog の一つの解釈である。一方、Prolog というプログラム言語を述語論理 という枠にはめないで捉える立場もある。導出、単一化、非決定性、双方向性、関係データベース といったこの言語に独特の機能とその表現力、記述力に着目し、そのプログラム言語としての可能性を率直に評価しようとするものである。
新たにProlog を学びたいと思う人は、他のプログラム言語を全く知らなくても、ソフトウェア科学的な予備知識や概念に不通であっても、単一化という単純なルールをほとんど唯一の基軸として、パズル的な、あるいはゲーム的な感覚にだけ導かれて、プログラムを簡単に書き進むことができる。さらに、どの言語にも比して平坦で、平明な言語構造を持つProlog はラベル名(アトム、関数名、述語名)に適切な意味性を付与することにより、自然言語の領域にも接近したプログラミングが期待できるほとんど唯一の言語でもある。
十分述語論理的な教養を持った上でProlog を学び、そのプログラムを書くならば、短期間で高度で安定したプログラムを書くことができる。しかし、それを前提としないでも、Prolog は冒険的で、未知の領域に満ちたプログラム言語なのである。
実はこれらの主張は、述語論理的な主張に隠れて、これまであまり強調されたことがなかった。
このような立場や主張が生まれる背景には、Prolog が期待されたほどにはソフトウェア革新の担い手になり得ていない理由が、その後の数理論理学の学問的な評価をもって、プログラム言語としての可能性を十分検証することを放棄して、定理証明といった狭い目的へ封じ込めようとする風潮を生んだことにある、という反省がある。そのことを踏まえて、Prolog が述語論理から成立したことにこだわらず、実在するプログラム言語として自由な視点からこの言語を見直そうとするものである。
Prolog はLISP の資産の多くを継承して間違いなく記号処理用の言語であるが、人工知能 言語として分類されることも多い。これは、人工知能の世界では述語論理が古くから理論的な柱の一つとなっているからである。述語論理を基礎とするトップ・ダウン式の問題解決と同じく述語論理を基礎とするProlog の駆動機構の相性は当然良いため、人工知能研究に広く利用されてきた。特にエキスパートシステム で多用されるプロダクションシステムにおいては、ルールを自然に自ら動的に変更できる能力を持つことと、後ろ向き推論と呼ばれる推論がProlog の導出過程そのものであることから、その最も主要な記述言語の位置を占めてきた。
Prolog は一階の述語論理に対応することから論理型言語 に分類される汎用言語であるが、その主張の一行一行を独立して論理式とほとんど等価な表現で行うことから、最も代表的な宣言型言語 と見なされている。Prolog のプログラム単位である述語の各節の本体に現れる質問単位である副目標数は平均5個以内と極めて少ない。この副目標と各節の頭部に現れる引数の組み合わせによって得られる関係が述語の意味を構成している考えられる。これが宣言型とされるゆえんである。
<頭部 > :- <本体>. % Prologの節は頭部と本体によって構成される。 % 述語定義は複数の節からなる。本体は幾つかの副目標からなる。 % 副目標の全てが真となった時に節の宣言は成立する(節は真となる)。 述語名 ( 引数_1 , 引数_2 ) :- <副目標_1> , <副目標_2>. 述語名 ( 引数_1 , 引数_2 ) :- <副目標_3 > ・・・ 単一化は1960年代の述語論理理論の発展の鍵となった概念であるが、Prolog が述語論理に導かれて機械による自動証明を実現するためのプログラム言語として成立したことから、必然的にこの言語の必須の最も重要な機構となった。単一化は副目標(質問)と対応する定義節の頭部のパターンが完全に一致するか、調べることで、節の選択[ 注 1] を可能にする。さらに、Prolog の実行順序等の制御は単一化のからくりを利用してプログラミングされる。
簡単なからくりでかつ極めて強力な単一化であるが実行コストも大きい、すなわち実行速度が遅くなる原因となる。さらに、パターンとして認識することと引き換えに、引数での関数評価は不可能になった。独立して節の本体で式評価を記述しなくてはならないため、数値計算ではやや冗長になる。これらの点は、単一化の強力さとのトレードオフの関係になっている。
型付けは動的型付けに分類できるが、言語仕様の中に型概念は登場しない。上記の単一化、バックトラッキング、と論理変数の束縛においては独特のものがあり、その実行は型推論の実行過程に酷似している。既にProlog はその引数の引渡し時に単一化という厳密なパターンマッチングを施すことに多大なコストを掛けた。単一化だけでプログラムをコントロールできる言語がProlog であるといっても過言ではない。この単一化のみによる簡素で強力なプログラムコントロールの足を引っ張ることに成り兼ねない、型付けの強化は、Prolog 言語とその支持者によって受け入れられることはないだろう。
Prolog は言語による思考をモデル化して主語・述語といった意味での文中の述語を特に重視して記述する系である。この一点からも、対象物を中心に記述していくオブジェクト指向とは距離が大きい。述語論理以前にオブジェクトありきとする立場を一般には取らない。
いくつかの処理系では、オブジェクト指向言語としての拡張が行なわれているが、オブジェクトを中心に設計されることは、論理プログラミングを重視して記述される限りほとんどない。分類するならば、非オブジェクト指向言語に分類される。オブジェクト指向に拡張された言語としては
が存在する。
後に述べるがProlog の述語はその構造が頭部と本体と分かれていて、本体はルールを意味するため、全体として、ルールを持ったデータベース、演繹データベースとして捉えることができる。これはPrologプログラム全体がデータベースであるということだから、データベースの表現としては最強のクラスに属する。一方、事実を表す本体のない(強制的に真)頭部のみの定義節による述語は関係データベース とその集合論的な性質で一致する。収集した情報を一つの述語に対して多数の頭部のみを持った節の集まりとして定義することにより、オンメモリ関係データベース を構築することが可能である。しかし、Prologをデータベース管理システムとして捉えた場合、assert、retract、setof、bagof、findall という組込述語を持つこと以外には、管理機構としての特別の組込述語が用意されている訳ではなく、ディクショナリ管理などのための述語定義をユーザが追加する必要がある。
関数型言語等、他のプログラミング言語と比較してのProlog の特長は、上記、一階述語論理に基づくこと、単一化、データベース言語的性格の他に、非決定性 と双方向性 が挙げられる。
非決定性 は、解が唯一とは限らない場合、処理系側から見てひとつの解に決定できない場合、外部からの選択の余地を与える。そういうことが当然可能なこととして述語は定義されていく。インタプリタトップではなく、導出を繰り返すプログラム内部にあっては、処理系側とした所を述語と置き換えて考えると、非決定性の述語の解を決定するのは、前方または後方に連接する質問(副目標)である。前方の副目標群から引数経由で与えられる情報によって副目標は一つの解を作り出すが、この解が真であるとするのは最終的に後方に連接する副目標である。この後方に連接した副目標が全て真となった場合に限り副目標は真となる。後方に連接する副目標のどれかが真にならなかった場合は、それが存在すればであるが別解を用意しなくてはならない。ここでも非決定性の述語、ここでは副目標から見ての解の決定権は、外部にあるということになる。
非決定性は導出の過程、取り分けバックトラックアルゴリズムと一体化しており、Prolog プログラムの制御の根幹のひとつである。ただ、非決定性述語実行時に見られる論理変数の 束縛→解放→再束縛という遷移、すなわち一度束縛されたものが別のものに再度束縛されるということを好ましくないとする見方もある。
双方向性 は、述語が実行された場合の返り値は真または偽だけであり、その代わりとして引数内の変数で値の授受を終始するのだが、このとき、入力として使われた変数が出力に、出力として使われていた変数が入力として使うことのできる述語となることがある。この性質を双方向性という。多くの場合、双方向性を持つ述語はそれ自体多義性を持つ。例えばappend という3引数の述語は第一引数と第二引数に具体的なリストが来て呼ばれた時は、リストを結合する意味でよいが、第三引数がリストで第一引数と第二引数が変数の状態で呼ばれた場合その意味は、リストを分解する、がふさわしい。既に存在するリストを、それが結合されて存在したものと考え、それではどのように結合されていったか、あるいは、どのような組み合わせで結合されていったのかを、示していると解釈できる。
このような、双方向性はProlog の述語自らがリバースエンジニアリング的開示能力を持ち、それを示していると捉えることができる。この性質は、Prologを含む論理型プログラム言語の持つ際立った特徴であり、プログラム作成時はもちろん、テスト、デバッグなどの検証の各段階でプログラムコードに対する見通しを向上させる。
プログラマは引数の単一化、再帰/失敗駆動等のプログラムパターンの選択、非決定性、双方向性といった特長をできる限り生かすことなどに配慮しながら、述語の骨格を決めプログラミングを進める。しかし、これらの特長、性質は複合した場合には相当に複雑であり、制御上相反する部分も多々ある。Prolog では、述語論理を逸脱して計算量/資源量/制御の調整に当たる述語「!」(カット)を導入してこの問題に対処しているが、Prolog プログラミングの難しさはこの調整部分に集中している。
Prolog の性格上、その歴史には定理の自動証明 の研究が大きく関係している。1930年にジャック・エルブラン は自動定理証明やPrologのベースとなる数理論理学 上の基本定理であるエルブランの定理 を発表した。エルブランの論文にはProlog で必須の単一化 アルゴリズムもすでに含まれていた[ 3] 。
1950年代以降、計算機上での定理証明の研究が活発になり、ギルモアのアルゴリズム (1960)やデービス・パトナムのアルゴリズム (1958,1960) 、プラウィツによる定理証明への単一化 アルゴリズムの導入(1960)などを経て、1965年のロビンソンによる導出原理 や1960年代後半のラブランドによるモデル消去の証明手続きの成果からひとつの結実期を迎えた。その数年後の1971年マルセイユ大学 のアラン・カルメラウアーとフィリップ・ルーセルのグループは自動定理証明システムとフランス語の自然言語解析システムとを組み合わせたコンピュータとの自然言語対話システムを作成していた。この際に自然言語解析システムも自動定理証明システムと共通の論理式という枠組みで構築できることに気が付き、論理式をそのままプログラムとして実行できる最初のProlog を1972年に完成させた[ 4] 。これは数千年に及ぶ人類の叡智である論理学の成果をプログラム言語に置き換えたものと言えるが、現在のProlog でプログラムの制御に使われるカットオペレータに相当する機能が最初から導入されるなど[ 5] 、現在のProlog と同様、単なる定理証明システムではなくプログラミング言語として設計されたものだった。以下にその当時のProlog プログラムの一部を示す。論理変数名の最初の文字が "*" で始まるなど、現在のProlog とはシンタックスが異なる。
READ RULES + DESC ( * X , * Y ) - CHILD ( * X , * Y );; + DESC ( * X , * Z ) - CHILD ( * X , * Y ) - DESC ( * Y , * Z );; + BROTHERSISTER ( * X , * Y ) - CHILD ( * Z , * X ) - CHILD ( * Z , * Y ) - DIF ( * X , * Y );; AMEN 彼らグループに理論的な助言を与えていたエジンバラ大学 のロバート・コワルスキとデービッド・H・D・ウォレン[ 注 2] は汎用機DECsystem10 上にマルセイユ大学とはシンタックスが異なる処理系を作り上げた。これは後にDEC-10 Prolog と呼ばれることになるが、ISO 標準規格を含む今日動作するProlog 処理系はほとんどがこの系統のシンタックスに従っている。
desc ( X , Y ) :- child ( X , Y ). desc ( X , Z ) :- child ( X , Y ), desc ( Y , Z ). brothersister ( X , Y ) :- child ( Z , X ), child ( Z , Y ), dif ( X , Y ). コワルスキはその後、インペリアル・カレッジ・ロンドン に移り、1979年に集大成ともいえる「Logic for Problem Solving 」を著し、その後のこの言語と論理プログラミングの研究に決定的な影響を与えた。
コワルスキの活動とDEC-10 Prolog の存在によって、英国はProlog 研究の中心地となった。エジンバラ大学 のW・F・クロックシン[ 注 3] とC・S・メリシュ[ 注 4] の著わした「Programming in Prolog 」は長くProlog のバイブル本として利用された。エジンバラ大学からSRIインターナショナルに転じたディビッド・ウォレンは1983年Prolog の仮想マシンコードであるWarren's Abstract Machine (英語版 ) (WAM)を発表した。この後のProlog 処理系の実装は、一旦C言語 などでこの仮想マシンコードを実装して、その上でProlog のソースコードをこのマシンコードに変換するコンパイラを用意するという手順を踏むことによって、開発を簡素化し実装上の標準化を図ることが普通になった。日本の新世代コンピュータ技術開発機構 のProlog マシン PSI は1987〜1988年頃に開発された PSI2 からこれを採用したし、その後開発されたProlog 処理系の多くはこの方式に従った。
1976年にSRIに留学していた古川康一はカルメラウアーらのProlog 処理系のリストを見つけ帰国時に電子技術総合研究所 に持ち帰った[ 6] 。当時電子技術総合研究所で推論機構研究室長をしていた渕一博 はこのリストを解析してProlog 処理系を走らせ、ルービックキューブを解くプログラムを作成するなど論理プログラミングに対する理解を深めていった[ 6] 。
1978年MITに留学中の中島秀之が「情報処理」誌に紹介記事を寄稿して、Prolog は日本でも広く知られるようになった。
新世代コンピュータ技術開発機構とProlog [ 編集 ] 1970年代終り頃、日本では通産省の電子技術総合研究所の渕一博 を中心とするグループが論理プログラミングの重要性を認識して、日本のコンピュータ技術の基礎技術としてこれを取り上げることを提案する。これが最終的に1980年代の新世代コンピュータ技術開発機構の発足と活動につながった。総額約570億円の国家予算を約束されて1982年に新世代コンピュータ技術開発機構(ICOT )は活動を開始する。Prolog を含む論理型言語はこの研究の核言語と位置づけられ世界的な注目を浴びることとなる。約10年間の研究活動中にProlog と論理プログラミングの研究は急激に深化した。実際1980年からの20年間にProlog をメインテーマにした日本語の書籍は約50冊発刊された。ICOT の研究員は積極的に Prolog の啓蒙に努め、講習会、チュートリアル、ワークショップを年に一度ならず開催した。ICOT が主催したロジック・プログラミング・コンファレンスは1983〜1985年頃をピークに若い研究者達を刺激した。研究活動前半の期間では論理型言語の実用性を証明するために、Prolog マシン が設計され、三菱電機と沖電気によって製作され、ICOT の他大学等研究機関に配布された。この個人用逐次推論マシンPSI の機械語KL0 は単一化やバックトラックなどProlog の基本的特徴を完全に備えていた。この KL0 によって、PSI のマイクロコードを制御した。KL0 を基礎として、オペレーティングシステムSIMPOS が設計され、これを記述するために、Prolog にオブジェクト指向プログラミングを取り入れたESP [ 注 5] が近山隆により設計されて使われた。ESPは多重継承を特徴とする当時としては先鋭のオブジェクト指向言語であったが、後にカプセル化の不備などが指摘されて、今日あまり話題となることはない。しかし、OSを記述するという課題を通じて、論理型言語にオブジェクト指向言語的要素を加えることによって、可読性が高まりプログラム管理がしやすくなることが確認された。その反面、Prolog のみでオペレーティングシステム を完全に記述してみる絶好の機会を逸したことも確かである。ESPはPSIを前提にせずに利用できるように、C言語で書き直したCESPが開発されたが、これが普及への起爆剤になることはなかった。後に述べるように、PrologのISO標準規格のモジュール仕様としてESPの採用が否決された1995-6年頃以降はほとんど利用されることはなくなった。
ここまで述べたように、PrologはICOT によって持ち上げられた言語Prolog との印象が強いが、Prolog というプログラミング言語から見てのICOT の影響は実は限定的だった。淵所長らICOT の主研究テーマは並列論理型言語にあり、研究後半ではProlog そのものからは離れて行くことになる。PSI に使用した電子基盤を利用して並列推論マシン PIM が製作されて、Guarded Horn Clauses (GHC)に基づく並列演算処理 を追加したKL1 が設計された。この環境に依存する形で、並列論理プログラム言語のKL1 は知識プログラミング 全般の研究に利用された。PSI とSIMPOS を使った研究も続けられはしたが、割り当てられた研究員の数は極めて少なかった。
ICOT の活動を総括して、知識プログラミング各課題において準備不足からくる未消化を指摘する向きが強いのだが、ことProlog から見ての前半期の活動は、今日語られることも少ないが、極めて充実したものであったといえる。
ICOT の活動盛期の1984年京都大学 の学生3名[ 7] が研究課題として製作したProlog-KABA がその性能の高さとアセンブラで記述されたことからくる高速性で世界を驚かせた。この処理系はMS-DOS 上で製品化されてProlog の普及に大きく貢献した。Successful pop や末尾再帰の最適化など高い安定した性能で黎明期のパソコン上のビジネスソフトの基礎言語としての展開も期待されたが、16ビットの整数しか持たず、浮動小数点数も扱えない仕様であったため、この分野への展開は起こらなかった。この点はアセンブラで記述されて簡単には拡張できない点が裏目に出た。結果としてこの仕様の乏しさが、日本のビジネスソフトが知識プログラミングの水準との間に横たわる分水嶺を越えることができなかった原因の一つとなった。
1990年代に入ると制約論理プログラミング が注目され処理系が多数誕生した。これはProlog から見ると引数の論理変数間の関係(制約)を記述可能に拡張したものである。制約論理型言語 は、変数評価に遅延実行などを持ち込むことが必要となるが、連立方程式をはじめとする多くの課題でProlog より記述が柔軟になる。Prolog の組込述語には引数が変数で渡るとエラーとなるものが多く、このためProlog プログラマは変数が具体化されるように副目標の記述順序に気を配る必要がある。結果としてプログラミングに逐次性が生じる。制約論理プログラミングにおいては、後に変数が具体化されたときに検査されるための変数の間の制約を記述するだけで、この逐次性の拘束を解決して通過することができる。実はこの制約はPrologから見ても自然な拡張であり、むしろProlog の単一化が制約論理プログラミングの制約を「=」のみに限定したものだと解釈することができる。しかし、簡素で逐次的な性格を強く持つProlog の処理系に慣れた利用者が、制約論理プログラミングの述語中に更に変数制約の宣言を追加しなくてはならない負担を、受け入れているとは言い難い。制約論理プログラム処理系がProlog のそれに置き換わる気配は、2013年11月現在においてもない。
ISO の標準化作業は1987年頃から作業委員会(WG17[ 8] )が作られ、日本委員も情報処理学会から15名ほどがこれに加わった。1995年ISO標準規格 がISO/IEC 13211-1 Prolog-Part 1: General Coreとして制定された。さらに、2000年にはISO/IEC 13211-2 Prolog-Part 2: Moduleとしてモジュール仕様が追加して規格化された。モジュール仕様については日本委員から、ICOTによって作成されたESP(Extended Self-contained Prolog)を以てその標準とする案が出されていたが、これは否決された。
ISO標準規格はエジンバラ仕様DEC-10Prolog を基調に既に一家をなしていたQuintus Prolog など有力ベンダと主としてヨーロッパの学者を主体にこれに日本などの委員が参加して作成された。この規格は現在 Prolog 処理系の製作者に指針を与え、大きな逸脱を心理的に妨げる役割を果たしているが、組込述語の個々の仕様ではベンダの意向が強く反映されたものの、全体としては最初に述べた論理学的立場を尊重して保守的で極めて小さな仕様となっている。そのため多くのProlog 処理系はこの規格の述語を搭載しつつ、独自の拡張部分を修正したり削除することに消極的である。結果として個々の処理系の互換性の乏しさは残り、それはProlog の弱点として認識されている。
JIS規格も一旦は2001年にJIS X 3013:2001が、"標題 プログラム言語Prolog―第1部:基本部"が要約JISとして発行されたが、2012年1月に何ら実効を見ること無く、「周知としての目的は終了した」として廃止された。
日本において、ICOT の活動時期から1990年代前半に掛けては、いわゆる人工知能ブームの時期であり、人工知能研究への期待はこの時期再び異様に高まった。LISP マシンによる医療情報エキスパートシステムでの成果は、人工知能の研究の成果の一部は情報処理に於いても利用可能なのではないかとの夢を抱かせた。このような評価の中でProlog は人工知能のアセンブリ言語的な位置づけを期待された。知識情報処理はこの水準の言語を基礎にその上側に築かれるべきだとの意味である。手っ取り早く利用可能な人工知能技術としてエキスパートシステムが選別され、これを支えるナレッジエンジニアの存在とそれを養成するための教育が必要とされた。Prolog はその中心に存在した。日本も例外ではないが、日本以外の国では特に、Prolog の名著は1990年代前半に刊行されている。これは、ICOT の活動とは若干のタイムラグがあるが、この時期社会的に 人工知能向き言語としてのProlog に大きな期待が寄せられていたことの証しである。エキスパートシステムはビジネス分野において広範囲に応用可能な基礎技術であったが、このような低水準な分野への適用はあまり試みられず、この分野からのProlog 言語への要請はほとんど見られないまま終った。
機械翻訳などの自然言語処理もまた人工知能の一翼を担う分野であるが、歴史的経緯から人工知能ブーム以前から、この言語に最も期待が掛けられた分野であった。しかし、左再帰 問題の回避でトップダウン解析の明解さをいきなり殺がれた。さらに句構造文法 への適用においては、Prolog が得意とする、句構造に分解して意味に相当するグラフを形成することの他に、極めて膨大な辞書を構造体として定義する必要が展望された。この辞書作成はProlog とは直接関係しないタスクであることから、次第にProlog は句構造文法によるアプローチの前線から後退してしまった。統計的言語処理のアプローチでは、単一化等に多くの計算量を費やすProlog は大量データを扱うのに不向きとされて、利用されることはほとんどない。自然言語処理のテキストの多くがProlog を用いて解説されているにも関わらず、期待が大きかった割に実務的には、表面に現れている成果はIBM社のワトソン 程度にとどまり、自然言語処理はむしろProlog 評価の足を引っ張る傾向にさえある。
日本においては、ICOT 解散後数年を経て、論理プログラミングとProlog は急激に下火となる。先にあげたコワルスキの成果があまりにも完成されたものでその研究成果の範囲を越えることが難しかったこと、歴史的にプログラム言語でありながら論理学からの逸脱を厳しく制限され、自由なアイデアによるプログラミング言語としての発展・展開が困難に見えたことも研究者・技術者を離れさせた。そして、人工知能ブームもまた去って行った。企業等で続けられた研究開発も発表される機会がProlog 産業応用シンポジウム(INAP)などに限定され、人々の目にProlog の成果が触れることは極端に少なくなった。ICOT の多大な研究成果がネット上に閲覧可能な状態で置かれたが、Prolog 言語の処理系はインターネット時代の技術・流れに乗れず、初心者・初学者が利用するためのネット上での情報も他の有力言語に比べて少なく、新しい利用者を惹きつけることができなかった。パソコンのオペレーティングシステムとしてMicrosoft Windows が一般に普及し始めると、初心者教育にウィンドウの部品の展開を題材とするのに適したオブジェクト指向言語に人気が集中し、Prolog は動作の遅い外れた言語のイメージを持たれるようになる。さらに21世紀に入るとProlog がクラス概念を持たないため、マイクロソフト社による.NET アーキテクチュアの共通言語基盤 (CLR)の対象言語から外され、この傾向に拍車をかけた。ついには枯れた言語というニュアンスを含んでではあるが、「化石言語」と揶揄されるまでに至ったのである。
盛時の勢いは失ったものの、Prolog は各教育機関で主として論理学の教材として利用され続け、今日まで数万人の人がProlog の講座を受講している。実務的に利用される機会が少ないにも関わらず、その素養を持つ人が大量に存在するという特異な位置にあるプログラム言語となっている。また、多くのプログラミング言語でその言語上にPrologインタプリタを制作してみることが難度の高い学習課題の一つとして採用され、その結果としてもPrologを理解しているプログラマは増加する傾向がある。
2011年夏 ブルース・A・テイト[ 注 6] 著『7つの言語 7つの世界』が出版され、その7つの言語の一つとしてProlog が紹介されたことから、多くの人々の関心を呼び起こし、この言語は突然に息を吹き返した。ダニエル・ジャクソン[ 注 7] 著『抽象によるソフトウェア設計』も翻訳されて述語論理に基礎を持つ形式記述言語alloy が注目されるなど、Prolog に極めて親近した領域での議論がようやく活発になった。 2012年 イワン・ブラトコ[ 注 8] 著「Prolog Programming for Artificial Intelligence 」の第四版が11年ぶりに刊行されて、人々にProlog は今でも活火山的な存在であることを印象付けた。また、世界的に利用されているアプリケーション自動生成ツールGeneXus がProlog によって書かれてからそれを他の利用言語に変換されて製品化されていることや、IBM 社のワトソンの根幹部分である言語解析部分と質問の生成部分を現在もProlog が担っていることなどが次々と喧伝されて、応用面でも現役言語であることが改めて認識されつつある。さらに世界的な関数型言語への急激な関心の高まりによって、関数型言語と類縁性の高い論理型言語の盟主であり、人気関数型言語Erlang の原像でもあるProlog への関心は再び強まってきた。 2013年IBM はワトソンの商用化を積極的に進めることとし、研究開発要員を2000名に増強することを発表した。さらに2014年秋、ソフトバンク との間でワトソンの日本語化で提携することが発表された。ソフトバンクは既にADSLの故障診断をPrologで開発して利用してきた実績があり、既に公開され、2015年春出荷が予定されている感情認識パーソナルロボットPepperでも中核部にPrologを採用することが予想されている。同社がワトソンと強く結びつくことによって、Pepperが将来ワトソンから情報を受け取ることによって、どのように強化されて、変化していくのかということが俄然興味深い問題に浮上した。同時に、その二つのシステムに跨って、Prologがどのような関わりを持つのか、役割を担うのかということも注目されている。 2021年8月4日に発表された"TIOBE Index for August 2021"で19位にランクされた。この指標は検索数や記事数などの指標であり、20位以内の復帰は2003年以来となる。世界的に話題性を取り戻しつつある証だろう。 2016年 FLOPS で Ki Yung Ahn と Andrea Vezzosi の論文 Executable Relational Specifications of Polymorphic Type Systems で Prolog による Let多相の型推論器が発表された。あまり話題にはなっていないが、昨今の型理論には一階述語論理が用いられており、型システムの実装実験において極めて簡略に記述出来るため、利用されていく可能性がある。 Prolog向けの集合論的型システムが実用化されれば、関数型言語学会において古くから用いられてきた数式をより形式的にできるようになるかもしれない。 多くの処理系はProlog の基本機能以外に、制約プログラミング や並行プログラミング のための拡張機能やConstraint Handling Rules などの各種言語をライブラリとして含んでいる。
INAP —International Conference on Declarative Programming and Knowledge Management FLOPS ー International Symposium on Functional and Logic Programming ^ 英 :resolution 、融合^ 英 :David H.D.Warren ^ W. F. Clocksin ^ 英 :C. S. Mellish ^ 英 :extended self-contained Prolog ^ 英 :Bruce A. Tate ^ 英 :Daniel Jackson ^ 英 :Ivan Bratko ^ Alain Colmerauer, Philippe Roussel.The birth of Prolog , p.2. ^a b Robert Kowalski.The Early Years of Logic Programming , p.38. ^ Buss, Samuel R., "On Herbrand's Theorem". ^ Alain Colmerauer and Philippe Roussel,The birth of Prolog , p.6. ^ Alain Colmerauer and Philippe Roussel,The birth of Prolog , pp.14-15. ^a b 古川 康一, p.5. ^ 萩野達也,桜川貴司,柴山悦哉 ^ https://www.complang.tuwien.ac.at/ulrich/iso-prolog/SWI7_and_ISO ^ “K-Prolog について ”. 2020年1月10日時点のオリジナル よりアーカイブ。2021年9月11日閲覧。 ^ https://www.researchgate.net/publication/277325585_Aspects_of_Prolog_history_Logic_Programming_and_Professional_Dynamics William F. Clocksin, Christopher S. Mellish:Programming in Prolog: Using the ISO Standard . Springer, 5th ed., 2003,ISBN 978-3540006787 . Leon Sterling, Ehud Shapiro:The Art of Prolog: Advanced Programming Techniques , 1994,ISBN 0-262-19338-8 . D.L. Bowen, L. Byrd, F.C.N. Pereira,L.M. Pereira and David H.D. Warren:DECsystem-10 PROLOG USER'S MANUAL , University of Edinburgh,1982. ISO/IEC 13211: Information technology — Programming languages — PrologPart 1: General core Part 2: Modules . International Organization for Standardization, Geneva.Robert Kowalski.The Early Years of Logic Programming , CACM January 1988. Alain Colmerauer ,Philippe Roussel .The birth of Prolog , inThe second ACM SIGPLAN conference on History of programming languages , p. 37-52, 1992.David H D Warren , Luis M. Pereira and Fernando Pereira,Prolog - the language and its implementation compared with Lisp . ACM SIGART Bulletin archive, Issue 64. Proceedings of the 1977 symposium on Artificial intelligence and programming languages, pp 109 - 115.Buss, Samuel R. , "On Herbrand's Theorem", in Maurice, Daniel; Leivant, Raphaël, Logic and Computational Complexity, Lecture Notes in Computer Science, Springer-Verlag, pp. 195–209. 1995.古川康一:第五世代コンピュータからスキルサイエンスへ - 論理プログラミング・アプローチ ,特別講演資料, 2014. 低水準言語 高水準言語
1950年代 1960年代 1970年代 1980年代 1990年代 2000年代 2010年代 2020年代
架空の言語