並行論理プログラミング(へいこうろんり?、英: Concurrent Logic Programming)は、論理プログラミングにおける並列性及び論理プログラミングによる並行処理の記述の研究から生まれた、並行プログラミングのためのパラダイムである。論理プログラミングでは述語論理式をゴール(Goal)の書き換え規則と見なし、ゴールの書き換えによって処理を行う。それに対し、並行論理プログラミングでは各ゴールをプロセスと見なして並行に書き換えを行い、ゴール間で共有する論理変数を通信チャネルとして情報交換や同期を行う。 通常、並行論理プログラミングではホーン節にガードを導入した以下のような形式でプログラムを記述する。Head :- Guard 。Body. このガード付きホーン節は、エドガー・ダイクストラのガード付きコマンドと同様のものである。ゴール書き換えにはヘッドとガードの条件を満たす規則が使用され、この選択は永続的なものとしてコミットされる。条件を満たす規則が複数ある場合はどれか1つが選択される (don't-care non-determinism/indeterminate)。ガードの条件を満たす規則がない場合、ゴールの書き換えは中断され、ガードの条件を満たすような入力を受け取った後に書き換えが行われる。これらによりゴール間の同期が表現できる。この同期機構はコミッティッド・チョイス (committed-choice) とも呼ばれる。コミット後に書き換えられたボディ部の各ゴールは並行したプロセスと見なされる。 Prologなどと異なり、並行論理プログラミング言語ではコミット後のバックトラックを行わないため履歴の管理が不要になり、より効率のよい処理系の実装が可能になる。並行論理プログラミングは、通常の論理プログラミングから探索の機能を取り除き、代わりに並行実行の制御の機能を付加したものととらえることができる。また、定理証明系として見た場合、不完全だが健全な証明系と見なすことができる[1][2]。 並行論理プログラミングの考え方を取り入れた言語としては、Relational Language、Concurrent Prolog、Guarded Horn Clauses (GHC)とGHCの拡張であるKL1、PARLOG、Strandなどがある。これらの言語では、多くの場合ストリームで通信を行う動的なプロセスの集まりでプログラムを構成する。そのためこれらの言語の処理方式はストリーム並列とも呼ばれる。 理論的には、並行論理プログラミングは並行制約プログラミングをエルブラン領域(Herbrand universe)に適用したものであり、制約出力を等号制約("=")のみに制限したものと見なすことができる。
目次
1 概要
2 プログラミング
2.1 プロセス
2.2 論理変数
2.3 ガード
2.4 プロセス間の通信
3 プログラム例
4 他のプログラミングパラダイムとの比較
4.1 手続型プログラミング
4.2 関数型プログラミング
4.3 論理型プログラミング
5 プログラミング手法
5.1 ストリーム通信
5.2 未完成メッセージ
5.3 有限長バッファ通信
5.4 差分リスト
5.5 ショートサーキット
5.6 黒板モデル
6 並行論理プログラミング言語
6.1 Relational Language
6.2 Concurrent Prolog
6.3 PARLOG
6.4 Guarded Horn Clauses と KL1
6.5 Strand
6.6 その他の言語
7 歴史
8 脚注
9 参考文献
10 関連項目
11 外部リンク
概要