コンピュータサイエンスにおいて、プロセス計算(またはプロセス代数)は、並行システムを形式的にモデル化するための関連アプローチの多様なファミリーです。プロセス計算は、独立したプロセスの集合間の相互作用、通信、および同期の高レベルな記述のためのツールを提供します。プロセス計算は、プロセス記述を操作および分析できる代数法則を提供し、プロセス間の等価性に関する形式的な推論(たとえば、双模倣の使用)も可能にします。プロセス計算の代表的な例としては、 CSP、CCS、ACP、およびLOTOSがあります 。[ 1 ]このファミリーへの最近の追加には、 π計算、アンビエント計算、PEPA、融合計算、および結合計算があります。
既存のプロセス計算の種類は非常に多いが(確率的挙動、タイミング情報、分子間相互作用の研究のための特殊化を取り入れた変種を含む)、すべてのプロセス計算に共通する特徴がいくつかある。[ 2 ]
プロセス計算を定義するには、通信手段を提供する目的の名前(またはチャネル)のセットから始めます。多くの実装では、チャネルは効率を向上させるための豊富な内部構造を持っていますが、これはほとんどの理論モデルでは抽象化されています。名前に加えて、古いプロセスから新しいプロセスを形成する手段が必要です。常に何らかの形で存在する基本演算子により、次のことが可能になります。[ 3 ]
2つのプロセスの並列合成そして通常は、は、プロセス計算を逐次計算モデルから区別する重要な基本要素です。並列合成により、そして同時に独立して進行する。しかし、相互作用、つまり同期と情報の流れも可能になる。に(またはその逆)両者が共有するチャネル上で通信が行われます。重要なのは、1つのプロセスが同時に複数のチャネルに接続できる場合があることです。
チャネルは同期型と非同期型があります。同期型チャネルの場合、メッセージを送信するプロセスは、別のプロセスがメッセージを受信するまで待機します。非同期型チャネルは、このような同期を必要としません。一部のプロセス計算(特にπ計算)では、チャネル自体を(他の)チャネルを介してメッセージとして送信することができ、プロセス間の接続トポロジーを変更できます。また、一部のプロセス計算では、計算の実行中にチャネルを作成することもできます。
相互作用は、(常にではないが)方向性のある情報の流れになり得る。つまり、入力と出力は、双対的な相互作用プリミティブとして区別できる。このような区別を行うプロセス計算は、通常、入力演算子(例:)と出力演算子(例:) どちらも相互作用点 (ここでは) は、デュアルインタラクションプリミティブと同期するために使用されます。
情報が交換される場合、それは出力プロセスから入力プロセスへと流れます。出力プリミティブは、送信されるデータを指定します。このデータは同様に、入力がデータを受け取ることを想定している場合、1 つ以上のバインド変数が、データが到着したときに置き換えられるプレースホルダーとして機能します。、がその役割を担う。相互作用において交換可能なデータの種類を選択することは、異なるプロセス計算を区別する重要な特徴の一つである。
相互作用は時間的に順序付けられる必要がある場合がある。たとえば、次のようなアルゴリズムを指定することが望ましい場合がある。まず、あるデータを受信する。そしてそのデータを送信する逐次合成はこのような目的に使用できます。 これは他の計算モデルでよく知られています。プロセス計算では、逐次化演算子は通常、入力または出力、あるいはその両方と統合されます。たとえば、プロセス入力を待ちますこの入力が発生したときにのみ、プロセスが開始されます。受信したデータによってアクティブ化されます識別子の代わりに。
プロセス計算の計算の本質を包含する主要な演算削減規則は、並列合成、逐次化、入力、出力という観点のみで表すことができる。この削減の詳細は計算の種類によって異なるが、本質はおおむね同じである。削減規則は以下のとおりである。
この還元規則の解釈は次のとおりです。
プロセスのクラス出力演算の継続が計算の性質に大きく影響するため、範囲が広がることが許容されます。
プロセスは、特定の相互作用点で形成できる接続の数を制限しません。しかし、相互作用点では干渉(つまり相互作用)が許容されます。コンパクトで最小限の構成的システムを合成するには、干渉を制限する能力が不可欠です。隠蔽操作により、プロセスを並列に構成する際に、相互作用点間の接続を制御できます。隠蔽はさまざまな方法で表現できます。たとえば、π計算では、名前の隠蔽がで次のように表現できます一方、CSPでは次のように書かれるかもしれない。。
これまで説明してきた操作は有限の相互作用しか記述しておらず、したがって、非終了的な振る舞いを含む完全な計算可能性には不十分である。再帰と複製は、無限の振る舞いを有限に記述することを可能にする操作である。再帰は逐次処理の世界ではよく知られている。複製は、可算無限個の並列合成を省略したものと理解できる。プロセス:
プロセス計算には一般的にヌルプロセス(さまざまな表記法で次のように表される)も含まれます。、、、(または他の適切な記号)は、相互作用点を持たない。これは完全に不活性であり、その唯一の目的は、より興味深いプロセスを生成するための誘導アンカーとして機能することである。
20世紀前半には、計算可能な関数の非形式的な概念を捉えるために様々な形式体系が提案され、μ再帰関数、チューリングマシン 、ラムダ計算などが今日ではおそらく最もよく知られた例である。これらが本質的に等価である、つまり互いに符号化可能であるという驚くべき事実は、チャーチ=チューリングのテーゼを裏付けている。あまり言及されていないもう一つの共通点は、これら全てが逐次計算のモデルとして最も容易に理解できるということである。その後のコンピュータ科学の発展には、計算の概念、特に並行性と通信の明示的な表現について、より洗練された定式化が必要となった。プロセス計算、 1962年のペトリネット、 1973年のアクターモデルといった並行性モデルは、この研究の流れから生まれたものである。
プロセス計算の研究は、1973年から1980年にかけてロビン・ミルナーが行った通信システム計算(CCS)に関する画期的な研究から本格的に始まった。CARホアの通信逐次プロセス(CSP)は1978年に初めて発表され、その後1980年代初頭に本格的なプロセス計算へと発展した。CCSとCSPは発展するにつれてアイデアの相互交流が盛んに行われた。1982年、ヤン・ベルグストラとヤン・ウィレム・クロップは、後に通信プロセス代数(ACP)として知られるようになる研究を開始し、彼らの研究を説明するためにプロセス代数という用語を導入した。[ 1 ] CCS、CSP、ACPはプロセス計算ファミリーの3つの主要な分野を構成しており、他のほとんどのプロセス計算は、これら3つの計算のいずれかにその起源をたどることができる。
様々なプロセス計算が研究されてきたが、そのすべてがここで概説したパラダイムに当てはまるわけではない。最も顕著な例はアンビエント計算であろう。プロセス計算は活発な研究分野であるため、これは当然のことである。現在、プロセス計算の研究は、以下の問題に焦点を当てている。
プロセス代数の背後にある考え方は、以下のようないくつかのツールを生み出した。
履歴モノイドは、個々の通信プロセスの履歴を一般的に表現できる自由オブジェクトです。プロセス計算は、履歴モノイドに一貫した方法で課せられた形式言語です。 [ 6 ]つまり、履歴モノイドは同期を伴うイベントのシーケンスを記録することしかできず、許容される状態遷移を指定しません。したがって、プロセス計算は履歴モノイドにとって、形式言語が自由モノイドにとっての存在と同じです(形式言語は、クリーネスターによって生成されるアルファベットのすべての可能な有限長文字列の集合の部分集合です)。
通信にチャネルを使用することは、プロセス計算をペトリネットやアクターモデルなどの他の並行性モデルと区別する特徴の1つです(「アクターモデルとプロセス計算」を参照)。プロセス計算にチャネルを含める根本的な動機の1つは、特定の代数的手法を可能にし、それによってプロセスを代数的に推論しやすくすることでした。
{{cite book}}:|work=無視されました (ヘルプ)