論理プログラミング
論理プログラミングでは「ロジック(論理)+コントロール(制御)=アルゴリズム(算法)」とされている。ロジックとは、数理論理学の論理式を特定の解釈で投影したプログラム書式表現を指す。これの代表例はファクト(事実)とルール(規則)を列挙するものであり、ルールは論理包含を主体にする。コントロールとは、そのロジックに対して、一定のファクトまたは特定のゴール(目標)を起点にした任意の問題条件を与えて、一定の解決条件を導出(resolution)することを指す。これを問題解決と言う。ロジックとコントロールの融合は、多様な定理証明戦略を表現する。
最も普及しているProlog系の論理プログラムで使われる導出原理は、論理式をこれ以上解消できない所まで変形させていく演繹や簡約である。そこでのロジックはホーン節で表現されており、コントロールにはSLD導出が使われている。
ファクトとルールをまとめたモジュールを扱っている。module.predicate(A, B, C)のように表記できる。モジュールは、オブジェクト指向由来の継承と多態性を備えている。既存の上位モジュールを継承して新規の下位モジュールを定義できる。上位モジュールの変数に下位モジュールを代入してサブタイピングするのが多態性である。例えばvar.predicate(A, B, C)では、上位変数varに下位モジュールAを代入するとAのpredicateと解釈され、同変数に下位モジュールBを代入するとBのpredicateと解釈される。
Visual Prolog(英語版)
帰納推論を扱っている。これまでの演繹推論とは別種になる。
論理プログラミングは、1950年代から盛んになった自動定理証明と、1958年公開言語「LISP」を最初の実践手段にしている。マサチューセッツ工科大学でLISPを開発したジョン・マッカーシーは、Advice taker(英語版)という常識推論仮説を発表している。
ジョン・マッカーシーは更にこう補足しており、これは最初の人工知能仮説のようである。
なお、マッカーシーは現代で言われる論理プログラミングの形態にはそれほど関与していない。
宣言的知識表現と手続き的知識表現
1965年頃、スタンフォード大学のコーデル・グリーン(英語版)が、節形式(clausal form)のプログラムとその導出原理を考案した。これはジョン・アラン・ロビンソン(英語版)の命題論理の単一化の演繹法を参考にしていた。1967年にアバディーン大学で開発された言語「Absys(英語版)」は最初期の論理プログラミングとして知られている。
1960年代の論理プログラミングの進展を通して、数理論理学に忠実な宣言的知識表現と、最適化アルゴリズムを取り入れる手続き的知識表現のどちらを指針にするべきかという議題が提起されていた。宣言的の支持者は、スタンフォード大学とエディンバラ大学中心のジョン・アラン・ロビンソン(英語版)、コーデル・グリーン(英語版)、バートラム・ラファエル(英語版)、パット・ヘイズ(英語版)、ロバート・コワルスキ(英語版)らであった。