(57)【要約】プロトコルベースのアプリケーションをプロセスとして表すためのプロセスベースの言語で書かれた表現式を含むプログラム（３２４、３２０）を開示する。プロセスカーネル（３２０Ｃ、３０６Ｃ、３０４Ｃ、３０８Ｃ）は、プログラム中の表現式を実行する。表現式は、カスタマイズ可能なタグベースの言語で書かれたデータの名前付き組織体系（３０２、３０４、３０６、３０８）を、そのデータの名前付き組織体系を送受信するプロセスの間でプロセスとして交換することができるようにすることによって、プロセスの対話を指定する。
2005525640.tif 000002
【特許請求の範囲】
【請求項１】
プロトコルベースのアプリケーションのモジュールの集まりを処理して、ネットワーク接続を通じてサービスを提供するためのコンピュータシステムであって、
プロトコルベースのアプリケーションをプロセスとして表すためのプロセスベースの言語で書かれた表現式を含むプログラムを格納するためのコンピュータ可読手段と、
前記プログラム中の前記表現式を実行するためのプロセスカーネルであって、前記表現式が、カスタマイズ可能なタグベースの言語で書かれたデータの名前付き組織体系をプロセス間でプロセスとして交換できるにすることによってプロセス間の対話を指定し、前記データの名前付き組織体系が、前記データの名前付き組織体系を送受信するプロセスの範囲にバインドされているプロセスカーネルと
を備えたことを特徴とするシステム。
【請求項２】
前記プロセスカーネルに結合されたオペレーティングシステムカーネルであって、メモリ、中央処理装置の時間、ディスク空間、および周辺デバイスを含むハードウェア資源の割り当ておよび使用を提供するオペレーティングシステムカーネルをさらに備えたことを特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
前記プロセスカーネルに結合されたデバイスドライバであって、前記コンピュータシステムがハードウェアデバイスと通信できるようにするソフトウェアコンポーネントを提供するデバイスドライバをさらに備えたことを特徴とする請求項１に記載のコンピュータシステム。
【請求項４】
インターネット上のウェブサービスを捜し出し、登録する方法を提供するディレクトリフレームワークをさらに備えたことを特徴とする請求項１に記載のコンピュータシステム。
【請求項５】
前記ディレクトリフレームワーク中のディスカバリコンポーネントであって、プロセス間のブローカとして働いて所望のウェブサービスを捜し出すディスカバリコンポーネントをさらに備えたことを特徴とする請求項４に記載のコンピュータシステム。
【請求項６】
プロトコルベースのアプリケーションのモジュールの集まりを処理して、ネットワーク接続を通じてサービスを提供するためのコンピュータで実行可能な方法であって、
プロセスベースの言語で書かれたプログラム中のプロセス表現式が実行されるときに、プロトコルベースのアプリケーションをプロセスとして表すことと、
クエリ表現式が実行されるときに、カスタマイズ可能なタグベースの言語で書かれたデータの名前付き組織体系をプロセスとして表すことと、
プロセスが前記データの名前付き組織体系をクエリとしてキューと送信または受信するときに、プロセスに通信させることであって、前記データの名前付き組織体系が、前記データの名前付き組織体系を送信または受信するプロセスの範囲にバインドされていることと
を備えたことを特徴とする方法。
【請求項７】
メモリ、中央処理装置の時間、ディスク空間、および周辺デバイスを含むハードウェア資源の割り当ておよび使用を提供するオペレーティングシステムカーネルと対話することをさらに備えることを特徴とする請求項６に記載の方法。
【請求項８】
前記方法が実施されたコンピュータシステムにハードウェアデバイスと通信できるようにするデバイスドライバと対話することをさらに備えることを特徴とする請求項６に記載の方法。
【請求項９】
プロトコルベースのアプリケーションを、ディレクトリフレームワークを介して、インターネット上のウェブサービスとして捜し出し、登録することをさらに備えることを特徴とする請求項６に記載の方法。
【請求項１０】
プロセス間の仲介を行って、前記ディレクトリフレームワーク中のディスカバリコンポーネントによって所望のウェブサービスを捜し出すことをさらに含むことを特徴とする請求項９に記載の方法。
【請求項１１】
プロトコルベースのアプリケーションのモジュールの集まりを処理して、ネットワーク接続を通じてサービスを提供するための方法を実行するためのコンピュータ実行命令を有するコンピュータ可読媒体であって、前記方法は、
プロセスベースの言語で書かれたプログラム中のプロセス表現式が実行されるときに、プロトコルベースのアプリケーションをプロセスとして表すことと、
クエリ表現式が実行されるときに、カスタマイズ可能なタグベースの言語で書かれたデータの名前付き組織体系をプロセスとして表すことと、
プロセスが前記データの名前付き組織体系をクエリとしてキューと送信または受信するときに、プロセスに通信させることであって、前記データの名前付き組織体系が、前記データの名前付き組織体系を送信または送受信するプロセスの範囲にバインドされていることと
を備えたことを特徴とするコンピュータ可読媒体。
【請求項１２】
メモリ、中央処理装置の時間、ディスク空間、および周辺デバイスを含むハードウェア資源の割り当ておよび使用を提供するオペレーティングシステムカーネルと対話することをさらに備えることを特徴とする請求項１１に記載のコンピュータ可読媒体。
【請求項１３】
前記方法が実施されたコンピュータシステムにハードウェアデバイスと通信できるようにするデバイスドライバと対話することをさらに備えたことを特徴とする請求項１１に記載のコンピュータ可読媒体。
【請求項１４】
プロトコルベースのアプリケーションを、ディレクトリフレームワークを介して、インターネット上のウェブサービスとして捜し出し、登録することをさらに備えたことを特徴とする請求項１１に記載のコンピュータ可読媒体。
【請求項１５】
プロセス間の仲介を行って、前記ディレクトリフレームワーク中のディスカバリコンポーネントによって所望のウェブサービスを捜し出すことをさらに備えたことを特徴とする請求項１４に記載のコンピュータ可読媒体。
【請求項１６】
クエリを定義するため、およびプロセスベースの言語で書かれたプログラム中のクエリおよびキューの間の対話を規定するためのクエリバーチャルマシンと、
プロセスを定義するため、およびプログラム中のプロセスの間の対話を規定するためのプロセスバーチャルマシンであって、プロセスにはプロトコルベースのアプリケーションが含まれるバーチャルマシンと、
クエリ、キュー、およびプロセスの間の有効な対話を定義するため、さらにクエリをプロセスとして解釈することによってクエリ、キュー、およびプロセスの間の対話を規定するための反応バーチャルマシンと
を備えたことを特徴とするコンピュータシステム。
【請求項１７】
前記クエリバーチャルマシン、前記プロセスバーチャルマシン、および前記反応バーチャルマシンを前記コンピュータシステムのその他のシステムソフトウェアコンポーネントから分離するための遷移バーチャルマシンをさらに備えたことを特徴とする請求項１６に記載のシステム。
【請求項１８】
キューは、異なる時間または同時に稼働するプロセスが一時的にオフラインになる場合がある異種ネットワークおよびシステムを介して通信できるようにする、構造化ストア、データベース、またはチャネルが含まれることを特徴とする請求項１６に記載のシステム。
【請求項１９】
クエリには、その他のクエリの組立および解体、キューの操作、およびクエリ内のパターンの検出を行うためにデータ操作言語で書かれた命令が含まれることを特徴とする請求項１６に記載のシステム。
【請求項２０】
プロセスには、アクションを行うことによって、またはその他のプロセスを展開させることによって展開する機能を有する計算エンティティが含まれることを特徴とする請求項１６に記載のシステム。
【請求項２１】
プロセスベースの言語で書かれた表現式をコンパイルするためのコンピュータで実行可能な方法であって、
前記表現式を構文解析して、キュー、１組のキューのデリミッタ、クエリ、シーケンスのデリミッタ、およびその他のアクションを表す構文要素を得ることと、
第１のアクションが前記クエリを前記キューに別のプロセスとしてサブミットするアクションであり、その後にその他のアクションを続けるプロセスとして前記表現式を翻訳することであって、前記クエリは、データを収容し、データを記述するカスタマイズ可能なタグベースの言語から形成される組織体系を含むことと
を備えることを特徴とする方法。
【請求項２２】
前記クエリを表す前記表現式の部分は、ヘッドおよびボディを含み、前記ヘッドは第１および第２のクエリヘッドのデリミッタで区切られ、前記ボディは第１および第２のクエリボディのデリミッタで区切られることを特徴とする請求項２１に記載の方法。
【請求項２３】
前記第１および第２のクエリヘッドのデリミッタの間にゼロ以上のクエリ項が収容されることを特徴とする請求項２２に記載の方法。
【請求項２４】
前記第１および第２のクエリボディのデリミッタの間にゼロ以上の制約項が収容されることを特徴とする請求項２２に記載の方法。
【請求項２５】
各制約項は、１つのクエリ項と別のクエリ項の間の関係を定義するバインディングであることを特徴とする請求項２４に記載の方法。
【請求項２６】
クエリ項は、リテラルを含むことを特徴とする請求項２５に記載の方法。
【請求項２７】
クエリ項は、相補リテラルを含むことを特徴とする請求項２５に記載の方法。
【請求項２８】
クエリ項は、ディスカーダを含むことを特徴とする請求項２５に記載の方法。
【請求項２９】
クエリ項は、変数の名前を含むことを特徴とする請求項２５に記載の方法。
【請求項３０】
クエリ項は、変数を含むことを特徴とする請求項２５に記載の方法。
【請求項３１】
クエリ項は、クエリ項のインバージョンを含むことを特徴とする請求項２５に記載の方法。
【請求項３２】
クエリ項は、クエリ項のタプルを含むことを特徴とする請求項２５に記載の方法。
【請求項３３】
クエリ項は、クエリ項の相補タプルを含むことを特徴とする請求項２５に記載の方法。
【請求項３４】
クエリ項は、ヘッド中にゼロ以上の変数を有する第２のクエリと、ボディ中にカンマで分離される第３および第４のクエリとを含むことを特徴とする請求項２５に記載の方法。
【請求項３５】
クエリ項は、引数として変数をとる左インジェクタを含むことを特徴とする請求項３４に記載の方法。
【請求項３６】
クエリ項は、引数として変数をとる右インジェクタを含むことを特徴とする請求項２５に記載の方法。
【請求項３７】
クエリ項は、ヘッド中にゼロ以上の変数を有する第５のクエリと、ボディ中に第６のクエリとを含むことを特徴とする請求項２５に記載の方法。
【請求項３８】
クエリ項は、クエリ項に関して動作する読取り演算子を含むことを特徴とする請求項３７に記載の方法。
【請求項３９】
クエリ項は、クエリ項に関して動作するコピー演算子を含むことを特徴とする請求項３７に記載の方法。
【請求項４０】
前記プロセスを表す前記表現式の部分は、前記プロセスの非アクティビティを表現できるようにする非アクティビティ演算子を含むことを特徴とする請求項２１に記載の方法。
【請求項４１】
前記プロセスを表す前記表現式の部分は、１組のプロセスを和算する和算演算子を含み、前記和算演算子は、前記プロセスが前記１組のプロセスから選択することができる選択肢の表現を与えることができるようにすることを特徴とする請求項２１に記載の方法。
【請求項４２】
前記プロセスを表す前記表現式の部分は、前記プロセスにバインドされる名前の作成を表現できるようにする新規演算子を含むことを特徴とする請求項２１に記載の方法。
【請求項４３】
前記プロセスを表す前記表現式の部分は、並列に実行する２つのプロセスを表現できるようにする並列演算子を含むことを特徴とする請求項２１に記載の方法。
【請求項４４】
前記プロセスを表す前記表現式の部分は、前記プロセスの無限挙動を表現できるようにするレプリケーション演算子を含むことを特徴とする請求項２１に記載の方法。
【請求項４５】
前記プロセスを表す前記表現式の部分は、第２のキュー、第２の１組のキューのデリミッタ、およびプロセスを含むことを特徴とする請求項２１に記載の方法。
【請求項４６】
前記プロセスを表す前記表現式の部分は、リフトされたクエリを含むことを特徴とする請求項２１に記載の方法。
【請求項４７】
プロセスベースの言語で書かれた表現式をコンパイルするための方法を実行するためのコンピュータ実行可能命令を有するコンピュータ可読媒体であって、前記方法は、
前記表現式を構文解析して、キュー、１組のキューのデリミッタ、クエリ、シーケンスのデリミッタ、およびその他のアクションを表す構文要素を得ることと、
第１のアクションが前記クエリを前記キューに別のプロセスとしてサブミットするアクションであり、その後にその他のアクションを続けるプロセスとして前記表現式を翻訳することであって、前記クエリは、データを収容し、データを記述するカスタマイズ可能なタグベースの言語から形成された組織体系を含むことと
を備えたことを特徴とするコンピュータ可読媒体。
【請求項４８】
前記クエリを表す前記表現式の部分は、ヘッドおよびボディを含み、前記ヘッドは第１および第２のクエリヘッドのデリミッタで区切られ、前記ボディは第１および第２のクエリボディのデリミッタで区切られていることを特徴とする請求項４７に記載のコンピュータ可読媒体。
【請求項４９】
前記第１および第２のクエリヘッドのデリミッタの間にゼロ以上のクエリ項が収容されていることを特徴とする請求項４８に記載のコンピュータ可読媒体。
【請求項５０】
前記第１および第２のクエリボディのデリミッタの間にゼロ以上の制約項が収容されていることを特徴とする請求項４８に記載のコンピュータ可読媒体。
【請求項５１】
各制約項は、１つのクエリ項と別のクエリ項との間の関係を定義するバインディングであることを特徴とする請求項５０に記載のコンピュータ可読媒体。
【請求項５２】
クエリ項は、リテラルを含むことを特徴とする請求項５１に記載のコンピュータ可読媒体。
【請求項５３】
クエリ項は、相補リテラルを含むことを特徴とする請求項５１に記載のコンピュータ可読媒体。
【請求項５４】
クエリ項は、ディスカーダを含むことを特徴とする請求項５１に記載のコンピュータ可読媒体。
【請求項５５】
クエリ項は、変数の名前を含むことを特徴とする請求項５１に記載のコンピュータ可読媒体。
【請求項５６】
クエリ項は、変数を含むことを特徴とする請求項５１に記載のコンピュータ可読媒体。
【請求項５７】
クエリ項は、クエリ項のインバージョンを含むことを特徴とする請求項５１に記載のコンピュータ可読媒体。
【請求項５８】
クエリ項は、クエリ項のタプルを含むことを特徴とする請求項５１に記載のコンピュータ可読媒体。
【請求項５９】
クエリ項は、クエリ項の相補タプルを含むことを特徴とする請求項５１に記載のコンピュータ可読媒体。
【請求項６０】
クエリ項は、ヘッド中にゼロ以上の変数を有する第２のクエリと、ボディ中にカンマで分離された第３および第４のクエリとを含むことを特徴とする請求項５１に記載のコンピュータ可読媒体。
【請求項６１】
クエリ項は、引数として変数をとる左インジェクタを含むことを特徴とする請求項６０に記載のコンピュータ可読媒体。
【請求項６２】
クエリ項は、引数として変数をとる右インジェクタを含むことを特徴とする請求項６１に記載のコンピュータ可読媒体。
【請求項６３】
クエリ項は、ヘッド中にゼロ以上の変数を有する第５のクエリと、ボディ中に第６のクエリとを含むことを特徴とする請求項６１に記載のコンピュータ可読媒体。
【請求項６４】
クエリ項は、クエリ項に関して動作する読取り演算子を含むことを特徴とする請求項６３に記載のコンピュータ可読媒体。
【請求項６５】
クエリ項は、クエリ項に関して動作するコピー演算子を含むことを特徴とする請求項６３に記載のコンピュータ可読媒体。
【請求項６６】
前記プロセスを表す前記表現式の部分は、前記プロセスの非アクティビティを表現できるようにする非アクティビティ演算子を含むことを特徴とする請求項４７に記載のコンピュータ可読媒体。
【請求項６７】
前記プロセスを表す前記表現式の部分は、１組のプロセスを和算する和算演算子を含み、前記和算演算子は、前記プロセスが前記１組のプロセスから選択することができる選択肢の表現を与えることができるようにすることを特徴とする請求項４７に記載のコンピュータ可読媒体。
【請求項６８】
前記プロセスを表す前記表現式の部分は、前記プロセスにバインドされる名前の作成を表現できるようにする新規演算子を含むことを特徴とする請求項４７に記載のコンピュータ可読媒体。
【請求項６９】
前記プロセスを表す前記表現式の部分は、並列に実行する２つのプロセスを表現できるようにする並列演算子を含むことを特徴とする請求項４７に記載のコンピュータ可読媒体。
【請求項７０】
前記プロセスを表す前記表現式の部分は、前記プロセスの無限挙動を表現できるようにするレプリケーション演算子を含むことを特徴とする請求項４７に記載のコンピュータ可読媒体。
【請求項７１】
前記プロセスを表す前記表現式の部分は、第２のキュー、第２の１組のキューのデリミッタ、およびプロセスを含むことを特徴とする請求項４７に記載のコンピュータ可読媒体。
【請求項７２】
前記プロセスを表す前記表現式の部分は、リフトされたクエリを含むことを特徴とする請求項４７に記載のコンピュータ可読媒体。
【請求項７３】
プロセスベースの言語で書かれた表現式の構造的同等性を規定する１組の等式法則を実行するためのコンピュータで実行可能な方法であって、
クエリがプロセスと並列に実行されることを記述する第１の表現式を構文解析することであって、前記クエリがヘッドとボディとを有し、前記ヘッドが空であり、前記ボディが第２の名前にバインドされている第１の名前を収容することと、
前記第１の表現式を第２の表現式と構造的に同等であるとして翻訳することであって、前記第２の表現式は、前記クエリがカノニカル形式であるならば前記クエリが前記プロセスと並列に実行されることを記述し、前記プロセスにおける前記第１の名前の各発生が、前記第２の名前と置き換え可能であることと
を備えることを特徴とする方法。
【請求項７４】
前記クエリのボディ中の制約すべてが既約であり、前記クエリが失敗でない場合にのみ、前記クエリはカノニカル形式であることを特徴とする請求項７３に記載の方法。
【請求項７５】
制約は、前記クエリが第２のクエリに簡約されるときに前記制約が前記第２のクエリの要素であるような第２のクエリが存在する場合にのみ、前記クエリにおいて既約であることを特徴とする請求項７４に記載の方法。
【請求項７６】
前記クエリは、前記クエリが第２のクエリに対して簡約可能であり、前記第２のクエリが失敗を収容する場合にのみ、失敗であることを特徴とする請求項７４に記載の方法。
【請求項７７】
制約は、前記制約が第２のリテラルにバインドされる第１のリテラルとして定義され、前記第１のリテラルが前記第２のリテラルの相補でない場合にのみ、失敗であることを特徴とする請求項７６に記載の方法。
【請求項７８】
プロセスベースの言語で書かれた表現式の構造的同等性を規定する１組の等式法則を実行する方法を実行するためのコンピュータ実行可能命令を有するコンピュータ可読媒体であって、前記方法は、
クエリがプロセスと並列に実行されていることを記述する第１の表現式を構文解析することであって、前記クエリがヘッドとボディとを有し、前記ヘッドが空であり、前記ボディが第２の名前にバインドされている第１の名前を収容することと、
前記第１の表現式を第２の表現式と構造的に同等であるとして翻訳することであって、前記第２の表現式は、前記クエリがカノニカル形式であるならば前記クエリが前記プロセスと並列に実行されることを記述し、前記プロセスにおける前記第１の名前の各発生が、前記第２の名前と置き換え可能であることと
を備えたことを特徴とするコンピュータ可読媒体。
【請求項７９】
前記クエリは、前記クエリのボディ中の制約すべてが既約であり、前記クエリが失敗でない場合にのみ、カノニカル形式であることを特徴とする請求項７８に記載のコンピュータ可読媒体。
【請求項８０】
制約は、前記クエリが第２のクエリに簡約されるときに前記制約が前記第２のクエリの要素であるような第２のクエリが存在する場合にのみ、前記クエリにおいて既約であることを特徴とする請求項７９に記載のコンピュータ可読媒体。
【請求項８１】
前記クエリは、前記クエリが第２のクエリに対して簡約可能であり、前記第２のクエリが失敗を収容する場合にのみ、失敗であることを特徴とする請求項７９に記載のコンピュータ可読媒体。
【請求項８２】
制約は、前記制約が第２のリテラルにバインドされる第１のリテラルとして定義され、前記第１のリテラルが前記第２のリテラルの相補でない場合にのみ、失敗であることを特徴とする請求項８１に記載のコンピュータ可読媒体。
【請求項８３】
プロセスベースの言語で書かれた表現式の意味を規定する操作的意味論規則のセットを実行するためのコンピュータで実行可能な方法であって、
プロセスが２つのプロセスからの選択であることを記述する第１の表現式を構文解析することであって、前記２つのプロセスの第１のプロセスは、第１のクエリがキューにサブミットされ、その後に前記第１のプロセスが第１のセットのアクションを続けることを表現し、前記２つのプロセスの第２のプロセスは、第２のクエリが前記キューにサブミットされ、その後に前記第２のプロセスが第２のセットのアクションを続けることを表現することと、
前記第１の表現式を第２の表現式に簡約することであって、前記第２の表現式は、第３のクエリが前記キューにサブミットされ、その後に前記第３のクエリがカノニカル形式であるならば、前記第１のプロセスが前記第２のプロセスと並列に実行することを記述することと
を備えることを特徴とする方法。
【請求項８４】
前記第３のクエリは、２つの項のバインディングの簡約であり、前記２つの項の第１の項は、第１の順列関数の前記第１のクエリへの適用を含み、第２の項は、第２の順列関数の前記第２のクエリへの適用を含むことを特徴とする請求項８３に記載の方法。
【請求項８５】
前記第３のクエリは、前記第３のクエリのボディ中の制約のすべてが既約であり、前記第３のクエリが失敗でない場合にのみ、カノニカル形式であることを特徴とする請求項８３に記載の方法。
【請求項８６】
制約は、前記第３のクエリが第４のクエリに簡約されるときに前記制約が前記第４のクエリの要素であるような第４のクエリが存在する場合にのみ、前記第３のクエリにおいて既約であることを特徴とする請求項８５に記載の方法。
【請求項８７】
前記第３のクエリは、前記第３のクエリが第４のクエリに対して簡約可能であり、前記第４のクエリが失敗を収容する場合にのみ、失敗であることを特徴とする請求項８５に記載の方法。
【請求項８８】
制約は、前記制約が第２のリテラルにバインドされる第１のリテラルとして定義され、前記第１のリテラルが前記第２のリテラルの相補でない場合にのみ、失敗であることを特徴とする請求項８７に記載の方法。
【請求項８９】
プロセスベースの言語で書かれた表現式の意味を規定する操作的意味論規則のセットを実行するための方法を実行するためのコンピュータ実行可能命令を有するコンピュータ可読媒体であって、前記方法は、
プロセスが２つのプロセスからの選択であることを記述する第１の表現式を構文解析することであって、前記２つのプロセスの第１のプロセスは、第１のクエリがキューにサブミットされ、その後に前記第１のプロセスが第１のセットのアクションを続けることを表現し、前記２つのプロセスの第２のプロセスは、第２のクエリが前記キューにサブミットされ、その後に前記第２のプロセスが第２のセットのアクションを続けることを表現することと、
前記第１の表現式を第２の表現式に簡約することであって、前記第２の表現式は、第３のクエリが前記キューにサブミットされ、その後に前記第３のクエリがカノニカル形式であるならば、前記第１のプロセスが前記第２のプロセスと並列に実行することを記述することと
を備えたことを特徴とするコンピュータ可読媒体。
【請求項９０】
前記第３のクエリは、２つの項のバインディングの簡約であり、前記２つの項の第１の項は、第１の順列関数の前記第１のクエリへの適用を含み、第２の項は、第２の順列関数の前記第２のクエリへの適用を含むことを特徴とする請求項８９に記載のコンピュータ可読媒体。
【請求項９１】
前記第３のクエリは、前記第３のクエリのボディ中の制約のすべてが既約であり、前記第３のクエリが失敗でない場合にのみ、カノニカル形式であることを特徴とする請求項８９に記載のコンピュータ可読媒体。
【請求項９２】
制約は、前記第３のクエリが第４のクエリに簡約されるときに前記制約が前記第４のクエリの要素であるような第４のクエリが存在する場合にのみ、前記第３のクエリにおいて既約であることを特徴とする請求項９１に記載のコンピュータ可読媒体。
【請求項９３】
前記第３のクエリは、前記第３のクエリが第４のクエリに対して簡約可能であり、前記第４のクエリが失敗を収容する場合にのみ、失敗であることを特徴とする請求項９１に記載のコンピュータ可読媒体。
【請求項９４】
制約は、前記制約が第２のリテラルにバインドされる第１のリテラルとして定義され、前記第１のリテラルが前記第２のリテラルの相補でない場合にのみ、失敗であることを特徴とする請求項９３に記載のコンピュータ可読媒体。
【請求項９５】
プロセスベースの言語で書かれた表現式の意味を規定する操作的意味論規則のセットを実行するためのコンピュータで実行可能な方法であって、
第１のアクションがクエリをキューにサブミットするアクションであり、その後に第２のプロセスを続ける第１のプロセスを記述する第１の表現式を構文解析することと、
前記第１の表現式を第２の表現式に簡約することであって、前記第２の表現式は、前記第１のクエリがカノニカル形式であるならば、リフトされたクエリが前記第２のプロセスと並列に実行することを記述することと
を備えることを特徴とする方法。
【請求項９６】
前記第１のクエリは、ヘッドが空でボディが制約リストである別のクエリと構造的に同等であることを特徴とする請求項９５に記載の方法。
【請求項９７】
前記制約リスト中の各制約は、２つの名前の間のバインディングであることを特徴とする請求項９６に記載の方法。
【請求項９８】
前記第１のクエリは、前記第１のクエリのボディ中の制約のすべてが既約であり、前記第１のクエリが失敗でない場合にのみ、カノニカル形式であることを特徴とする請求項９５に記載の方法。
【請求項９９】
制約は、前記第１のクエリが第２のクエリに簡約されるときに前記制約が前記第２のクエリの要素であるような第２のクエリが存在する場合にのみ、前記第１のクエリにおいて既約であることを特徴とする請求項９８に記載の方法。
【請求項１００】
前記第１のクエリは、前記第１のクエリが第２のクエリに対して簡約可能であり、前記第２のクエリが失敗を収容する場合にのみ、失敗であることを特徴とする請求項９８に記載の方法。
【請求項１０１】
制約は、前記制約が第２のリテラルにバインドされる第１のリテラルとして定義され、前記第１のリテラルが前記第２のリテラルの相補でない場合にのみ、失敗であることを特徴とする請求項１００に記載の方法。
【請求項１０２】
プロセスベースの言語で書かれた表現式の意味を規定する操作的意味論規則のセットを実行する方法を実行するためのコンピュータ実行可能命令を有するコンピュータ可読媒体であって、前記方法は、
第１のアクションがクエリをキューにサブミットするアクションであり、その後に第２のプロセスを続ける第１のプロセスを記述する第１の表現式を構文解析することと、
前記第１の表現式を第２の表現式に簡約することであって、前記第２の表現式は、前記第１のクエリがカノニカル形式であるならば、リフトされたクエリが前記第２のプロセスと並列に実行することを記述することと
を備えたことを特徴とするコンピュータ可読媒体。
【請求項１０３】
前記第１のクエリは、ヘッドが空でボディが制約リストである別のクエリと構造的に同等であることを特徴とする請求項１０２に記載のコンピュータ可読媒体。
【請求項１０４】
前記制約リスト中の各制約は、２つの名前の間のバインディングであることを特徴とする請求項１０３に記載の方法。
【請求項１０５】
前記第１のクエリは、前記第１のクエリのボディ中の制約のすべてが既約であり、前記第１のクエリが失敗でない場合にのみ、カノニカル形式であることを特徴とする請求項１０２に記載の方法。
【請求項１０６】
前記制約は、前記第１のクエリが第２のクエリに簡約されるときに前記制約が前記第２のクエリの要素であるような第２のクエリが存在する場合にのみ、前記第１のクエリにおいて既約であることを特徴とする請求項１０５に記載の方法。
【請求項１０７】
前記第１のクエリは、前記第１のクエリが第２のクエリに対して簡約可能であり、前記第２のクエリが失敗を収容する場合にのみ、失敗であることを特徴とする請求項１０５に記載の方法。
【請求項１０８】
制約は、前記制約が第２のリテラルにバインドされる第１のリテラルとして定義され、前記第１のリテラルが前記第２のリテラルの相補でない場合にのみ、失敗であることを特徴とする請求項１０７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、ネットワーク化されたコンピュータに関し、より詳細には、コンピューティング資源の並行（ｃｏｎｃｕｒｒｅｎｔ）、分散ネットワークを協調させるための方法に関する。
【背景技術】
【０００２】
本出願は、参照により本明細書に組み込まれる２００２年５月１０日に出願された「Process Programming Language」という名称の米国仮出願第６０／３７９，８６４、参照により本明細書に組み込まれる２００２年１１月２２日に出願された「Process Kernel」という名称の米国仮出願第１０／３０３，４０７、参照により本明細書に組み込まれる２００２年１１月２２日に出願した「Permutation Nuances of the Integration of Processes and Queries as Processes at Queues」という名称の米国仮出願第１０／３０３，４４５、参照により本明細書に組み込まれる２００２年１１月２２日に出願した「Structural Equivalence of Expressions Containing Processes and Queries」という名称の米国仮出願第１０／３０３，３７９、および参照により本明細書に組み込まれる２００２年１１月２２日に出願した「Operational Semantics Rules Governing Evolution of Processes and Queries as Processes」という名称の米国仮出願第１０／３０３，３４３の優先権を主張するものである。
【０００３】
自然言語とは、プログラミング言語や機械語とは異なり、人間によって話され、または書かれる言語である。プログラミング言語とは、最終的にコンピュータによって処理および実行することができる一連の命令を定義するために使用できる任意の人工的な言語である。何がプログラミング言語であり、何がプログラミング言語でないかを定義することは微妙なことであるが、一般的な使用法では、翻訳プロセス−プログラミング言語を用いて表現されるソースコードから、コンピュータが扱う必要のあるコードである機械コードへの−が、コンパイラなどの別のプログラムによって自動化されることを含意する。自然言語およびプログラミング言語の両方とも、人から人へ、または人から機械へというように、あるエンティティから別のエンティティに情報および命令を伝達する体系的な統立った手段である。残念ながら、以前のプログラミング言語は人から機械への情報および命令を伝達する仕方が完全ではなかった。
【０００４】
例えば、コンピューティング時代の初期には、アセンブリ言語を使用して低級プログラミング言語を形成していた。アセンブリ言語は、各ステートメントが単一の機械命令に対応する略語または簡略コードを使用している。プログラマが直接、システムハードウェアおよび資源と対話することによる高効率という利点に伴って、アセンブリ言語プログラムにわずかな変更が施されたときは、データ構造など、アドホックの組織体系を手動で更新しなければならないという望ましくない結果がもたらされた。今日の高級言語は、基礎をなす機械語の上に抽象化のレベルを提供するものであり、アセンブリ言語から進化したものである。高級言語のステートメントは、一般に、機械語命令に翻訳されるキーワード（通常は英語）を使用している。高級言語は、データ構造に対して組込みのサポートを有し、言語の構造を定義する１組の構文意味規則を定義している。高級言語で書かれたプログラムにわずかな変更が施された場合には、予め定義された１組の構文意味規則に従ってプログラムをオブジェクトコードに変換するコンパイラが、プログラムに施された変更に対応するために必要に応じてオブジェクトコードをリフローするか、あるいはプログラマに対して明らかなプログラミングエラーをはっきりと知らせる。
【０００５】
プログラマは、コンパイラの能力を活用して、呼出しＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）のシグニチャを定義されたＡＰＩの対応するシグニチャと照合することによって、ＡＰＩの呼び出しエラーを検出する。ＡＰＩは、プログラムが所望のタスクを行うために受け付けることになる入力のようなものと、プログラムがその所望のタスクの実行の後に返すことになる出力のようなものを定義するプログラムのインターフェースである。ＡＰＩによって、プログラムは協調して、それぞれが単独で提供できるよりも大きな機能性を提供できるようになる。
【０００６】
ＡＰＩは、ＡＰＩに何が提供されなければならないか、また、ＡＰＩから何が返されるかを指定するだけであり、ＡＰＩの下にあるプログラムの挙動を指定するわけではない。例えば、正しく協調するためには、「作業実行」プログラムが呼び出される前に「初期化」プログラムが呼び出されなければならず、同様に、「クリーンアップ」プログラムが呼び出される前に「作業実行」プログラムが呼び出されなければならない。ＡＰＩはこの順序付けの知識を持っているわけではなく、また、プログラムがどのように協調すべきかを表現する何らかのその他の知識を持っているわけでもない。その結果、去年のアセンブリプログラムのメンテナンスを行うという根気のいる仕事のように、プログラマは、現在の高級言語の表現力の限界内で作業することで、不適格なものをもう一度適応させて、プログラムが正しく協調するようにしなければならない。
【０００７】
前述の問題はウェブサービスの普及と共にさらに悪化している。ウェブサービスは、基本的には、インターネットによって相互接続された任意の数のコンピューティングデバイス上に配置されているプログラムである。単一のコンピューティングデバイス内のプログラムの協調の指定および根気のいる検証を−大変なことではあるが−行うことはできるが、複数のウェブサービス（これは複数のコンピューティングデバイスから複数のメッセージを送信する）の協調に関連する入り組んだ問題を検証するタスクは、現在の高級言語の表現力の欠如のため、克服できない問題となっている。何よりも、順序付けやタイミングなど、プログラムやサービスの協調的側面をプログラム的に検証できるように、このような協調的側面を表現できるプログラミング言語が必要とされている。
【０００８】
１つの部分的解決策としてπカリキュラスの使用が挙げられる。πカリキュラスは、図１に示すシステム１００のように対話型並行システムにおけるプロセスを記述するための数学的言語である。システム１００は、クライアント１０２を含む。クライアント１０２は、ローカルエリアネットワークまたはインターネット１０４などのワイドエリアネットワーク上にあるサーバ１０６などの別のコンピュータによって提供されている共有ネットワーク資源にアクセスするコンピュータである。いくつかのウェブサービス１０８、１１６が、クライアント１０２およびサーバ１０６上にプログラムとして静的に格納されている。
【０００９】
初期のオペレーティングシステムでは、ユーザは一時に１つのプログラムしか走らせることができなかった。ユーザは、プログラムを走らせ、それが終了するのを待ち、それから別のプログラムを走らせた。現代のオペレーティングシステムでは、ユーザは一時に複数のプログラムを実行する（走らせる）ことができ、また、同じプログラムの複数のコピーを同時に実行することさえできる。スレッドは、プログラムにプロセッサの時間を割り当てるためにオペレーティングシステムによって使用される基本単位である。スレッドは、別のスレッドによって現在実行されている部分を含め、プログラミングコードのどの部分でも含むことができる。プロセッサは、一時に１つのスレッドしか実行することができない。しかし、マルチタスキングオペレーティングシステム、すなわちユーザが複数のプログラムを走らせることができるオペレーティングシステムは、複数のプログラムを同時に実行するように見える。実際には、マルチタスキングオペレーティングシステムは、プログラムを絶えず交代させて、あるプログラムから１つのスレッドを、次いで別のプログラムから１つのスレッドをというように実行している。各スレッドがそのサブタスクを終了すると、プロセッサには実行すべき別のスレッドが与えられる。プロセッサの並外れたスピードにより、すべてのスレッドが同時に実行しているような錯覚を与える。
【００１０】
マルチタスキングおよびマルチプロセッシングという用語は同義に使われることがあるが、異なる意味を持っている。マルチプロセッシングはマルチプロセッサを必要とする。マシンがプロセッサを１つしか備えていない場合、オペレーティングシステムは、マルチタスクを行うことはできるがマルチプロセスを行うことはできない。単一のマシンが複数のプロセッサを有している場合、またはそれぞれが１つのプロセッサを有する複数のマシン（クライアント１０２およびサーバ１０６）がある場合、単一マシンのオペレーティングシステムまたは複数マシンのオペレーティングシステムは、マルチタスクおよびマルチプロセスの両方を行うことができる。複数のプロセッサを有する単一のマシン、およびそれぞれが１つのプロセッサを有する複数のマシンの両方が、並行システム（ｃｏｎｃｕｒｒｅｎｔ  ｓｙｓｔｅｍ）を定義付ける。これが、πカリキュラスにとっての興味の対象である。
【００１１】
πカリキュラスのコアは、リンク（リンク１２４など）を介して通信を行う独立した並列のプロセス（ウェブサービス１０８、１１６など）のシステムから構成される。リンクは、次のうちのいずれかとすることができる。すなわち、リモートプロシージャコールとなるＡＰＩ、作成され、あちこちに渡され、除去されることがあるハイパーテキストリンク、およびオブジェクト指向システムにけるメソッド呼出しの引数として渡されるオブジェクト参照（例えば、「ｒｏｓｅ」など）である。プロセスが他のプロセスと通信できるかどうかは、それが様々な異なるリンクについて知っているかどうかに依存する。リンクは、ある特定のプロセスだけがその上で通信できるように制限することができる。πカリキュラスをその他のプロセス言語から際立たせているのは、制限の範囲（リンクを使用することができるコンテキスト）を実行中に変更できることである。例えば、ウェブサービス１１６が、それまではウェブサービス１１６にしか知られていなかったＡＰＩなど、制限付き名前を、その制限の範囲外にあるウェブサービス１０８へのメッセージとして送る場合、その範囲が拡張される（または、πカリキュラスの数学上の用語法では、エクストルードされる）。これは、ＡＰＩの範囲が、そのＡＰＩを受け取るウェブサービス１０８を包含するように拡大されることを意味する。言い換えれば、ウェブサービス１０８は、以前はそのＡＰＩの知識がなかったためにそのＡＰＩを呼び出すことができなかったが、今やそのＡＰＩによって表される関数を呼び出すことができる。このプロシージャによって、プロセスの通信の可能性は、πカリキュラスのフレームワーク内で時間と共に変化するようになる。プロセスは、範囲のエクストルージョン（ｅｘｔｒｕｓｉｏｎ）を介して新しいリンクの名前を知ることができる。このように、リンクは、通信を向上させるための伝達可能な量である。
【発明の開示】
【発明が解決しようとする課題】
【００１２】
πカリキュラスに関して、中心的で、基礎的で、普遍的なことは、それが「ｒｏｓｅ」などの名前、およびリンクを介して名前をメッセージとして受け渡すことに焦点を絞っていることである。特に、πカリキュラスは、それぞれが単なるビットパターンとして定義される純粋名（ｐｕｒｅ  ｎａｍｅ）に重点を置いている。純粋名の例としては、ＣＯＭコンポーネントモデルにおいてインターフェースまたは実装を一意に識別する１２８ビット空間のＧＵＩＤ（Ｇｌｏｂａｌｌｙ  Ｕｎｉｑｕｅ  Ｉｄｅｎｔｉｆｉｅｒ）が挙げられる。純粋名の別の例としては、上記の関数シグニチャまたはＡＰＩがある。さらに明確にするために、上述の問題を次の観点で考察してみる。ウェブサービス１１６からウェブサービス１０８に送られた３つのＡＰＩ（「初期化」、「作業実行」および「クリーンアップ」）があるが、ウェブサービス１１６は、これら３つのＡＰＩを特定の順序（例えば、「初期化」、次いで「作業実行」、次いで「クリーンアップ」）でのみ呼び出さなければならないと仮定する。既存のπカリキュラスおよびその変形は、これら３つのＡＰＩを、リンク１２４を介してウェブサービス１１６からウェブサービス１０８に届くように送ることができるようにするが、既存のπカリキュラスおよびその変形は、ウェブサービス１１６がウェブサービス１０８に対して、それら３つのＡＰＩを呼び出すべき特定の順序を表現する方法を欠いている。この意味で、既存のπカリキュラスおよびその変形は、とりわけ、順序付けやタイミングなど、プログラムやサービスの協調的な側面を表現することが完全にはできず、そのような協調的な側面をプログラム的に検証することができない。
【００１３】
エリザベス朝時代のある詩人による次の簡潔な格言が、形式は暗喩的であるが、時間を超越した観察を表している。「名前には何があるか？我々が薔薇と呼んでいるものは、別の名前でも甘く香るであろう。」このずっと昔になされた観察は、πカリキュラスおよびその変形の現在の問題−名前付きリンク（リンク１２４など）での構造化データの受け渡しに対する許容力の欠如−を正確に指し示している。実際、πカリキュラスは、構造化データを「不純名」と悪く称し、これは中傷的言語構成である。純粋性は望ましく、不純は忌み嫌われる。このように、πカリキュラスのコンテキストにおける不純名とは、拡張マークアップ言語（ＸＭＬ）文書など、ある種の認識可能な構造を有するデータである。実際のところ、あるプロセスが、別のプロセスに構造化データを通信することは役立つ（場合によっては必要である）。
【００１４】
データのフローなしには、プロセス間のモビリティまたはダイナミズムを表すために、きわめて間接的な方法を除き、プロセス間の通信を容易にすることは難しい。この問題を解消するために、コンピュータ科学者達は、プロセスがリンクを介して通信の中で流れるようにする可能性について調査してきた。例えば、プロセス１１０は、第３のプロセス（図示せず）を表すメッセージをプロセス１１８に送ることがある。これは、高次πカリキュラスとして知られる。πカリキュラスは、リンクを介してプロセスを送る代わりに純粋名を扱うという硬直性のために、高次πカリキュラスの変形さえも、プロセス自体を送る代わりに所望のプロセスへのアクセスを与える名前を送る。
【００１５】
プロセスではなく名前を送ることは、従来の参照による受け渡しのプログラミング技術、すなわちパラメータのアドレスを呼出し元ルーチンから呼び出し先ルーチンに渡し、そのアドレスを使ってパラメータの値の取り出しまたは修正を行うプログラミング技術にたとえることができる。高次πカリキュラスの変形において参照による受け渡し技術を採用することの主な問題は、その技術が、並行システムを分散化する能力を妨げることがあることである。πカリキュラスには多くの実装形態があり、特に、ＰＩＣＴ、Ｎｏｍａｄｉｃ  ＰＩＣＴ、ＴｙＣＯ、Ｏｚ、Ｊｏｉｎが挙げられる。しかし、これらの他の実装形態は、分散されないか（ＰＩＣＴ）、またはπカリキュラスの高次形式ではない（Ｎｏｍａｄｉｃ  ＰＩＣＴ、ＴｙＣＯ、Ｏｚ、およびＪｏｉｎ）。
【００１６】
したがって、既存のπカリキュラスおよびその変形に関連する上述およびその他の問題を回避または低減しつつ、並行分散コンピューティングネットワークにおけるプロセスを対話可能にするためのより良い方法およびシステムの必要性がある。
【課題を解決するための手段】
【００１７】
本発明によれば、プロセスベースの言語で書かれたプログラムを処理するためのシステム、方法、およびコンピュータ可読媒体が提供される。本発明のシステムの形態は、プログラムを格納するためのコンピュータ可読手段を備える。プログラムは、プロトコルベースのアプリケーションをプロセスとして表すためのプロセスベースの言語で書かれた表現式（ｅｘｐｒｅｓｓｉｏｎｓ）を含む。このシステムはまた、プログラム中の表現式を実行するためのプロセスカーネルも備える。表現式は、カスタマイズ可能なタグベースの言語で書かれたデータの名前付き組織体系（ｎａｍｅｄ  ｏｒｇａｎｉｚａｔｉｏｎａｌ  ｓｃｈｅｍｅ）が、プロセス間でプロセスとして交換されうるようにすることによって、プロセスの対話を指定する。データの名前付き編成スキーム組織体系は、そのデータの名前付き組織体系を送信または受信するプロセスの範囲にバインドされる。
【００１８】
本発明のさらなる態様によれば、本発明の方法の形態は、コンピュータシステムに実装可能である。この方法は、プロセスベースの言語で書かれたプログラム中のプロセス表現式が実行されるときに、プロトコルベースのアプリケーションをプロセスとして表すことを備える。この方法は、クエリ表現式が実行されるときに、カスタマイズ可能なタグベースの言語で書かれたデータの名前付き組織体系をプロセスとして表すことをさらに備える。この方法は、プロセスがデータの名前付き組織体系をクエリとしてキューと送信または受信するときに、プロセスに通信させる。データの名前付き組織体系は、そのデータの名前付き組織体系を送信または受信するプロセスの範囲にバインドされる。
【００１９】
本発明のさらなる態様によれば、本発明の別のシステムの形態は、クエリを定義するため、およびプロセスベースの言語で書かれたプログラム中のクエリおよびキューの間の対話を規定するためのクエリバーチャルマシンを含む。このシステムはまた、プロセスを定義するため、およびプログラム中のプロセスの間の対話を規定するためのプロセスバーチャルマシンを含み、プロセスはプロトコルベースのアプリケーションを含む。このシステムは、クエリ、キュー、およびプロセスの間の有効な対話を定義するため、さらにクエリをプロセスとして解釈することによってクエリ、キュー、およびプロセスの間の対話を規定するための反応バーチャルマシンをさらに含む。
【００２０】
本発明によれば、プロセスベースの言語で書かれたプログラムを処理するための方法およびコンピュータ可読媒体が提供される。本発明によれば、本発明の方法の形態は、表現式を構文解析して、キュー、１組のキューのデリミッタ、クエリ、シーケンスのデリミッタ、およびその他のアクションを表す構文要素を得ることを備える。この方法は、第１のアクションがクエリを別のプロセスとしてキューにサブミットするアクションであり、その後にその他のアクションを続けるプロセスとして、表現式を翻訳する。このクエリは、データを収容し、データを記述するカスタマイズ可能なタグベースの言語から形成された組織体系を含む。
【００２１】
本発明の一態様によれば、プロセスベースの言語で書かれた表現式の構造的同等性を規定する１組の等式法則を実行するための本発明の方法の形態が提供される。この方法は、第１の表現式の構文解析を行う。第１の表現式は、クエリがプロセスと並列に実行されていることを記述している。このクエリは、空のヘッドと、第２の名前にバインドされた第１の名前を収容するボディを有する。この方法は、第１の表現式を第２の表現式と構造的に同等であるとして翻訳する。第２の表現式は、クエリがカノニカル形式であるならば、プロセスと並列に実行されることを記述している。プロセスにおける第１の名前のそれぞれの発生（ｏｃｕｒｒｅｎｃｅ）は、第２の名前と置き換え可能である。
【００２２】
本発明によれば、プロセスベースの言語で書かれたプログラムを処理するための方法およびコンピュータ可読媒体が提供される。プロセスベースの言語で書かれた表現式の意味を規定する操作的意味論規則（ｏｐｅｒａｔｉｏｎａｌ  ｓｅｍａｎｔｉｃｓ  ｒｕｌｅｓ）のセットを実行するための本発明の方法の形態が提供される。この方法は、第１の表現式の構文解析を行うことを含む。第１の表現式は、プロセスが２つのプロセスの選択であることを記述している。これら２つのプロセスのうちの第１のプロセスは、第１のクエリがキューにサブミットされ、その後にこの第１のプロセスが第１のセットのアクションを続けることを表現している。これら２つのプロセスのうちの第２のプロセスは、第２のクエリがキューにサブミットされ、その後にこの第２のプロセスが第２のセットのアクションを続けることを表現している。この方法は、第１の表現式を第２の表現式に簡約することをさらに含む。第２の表現式は、第３のクエリがキューにサブミットされ、その後に、この第３のクエリがカノニカル形式であるならば、第１のプロセスが第２のプロセスと並列に稼働することを記述している。
【００２３】
本発明のさらなる態様によれば、プロセスベースの言語で書かれた表現式の意味を規定する操作的意味論規則のセットを実行するためのさらなる方法が提供される。この方法は、第１の表現式の構文解析を行う。第１の表現式は、第１のアクションがクエリをキューにサブミットするアクションであり、その後に第２のプロセスを続ける第１のプロセスを記述している。この方法は、第１の表現式を第２の表現式に簡約することをさらに含む。第２の表現式は、第１のクエリがカノニカル形式であるならば、リフトされたクエリ（ｌｉｆｔｅｄ  ｑｕｅｒｙ）が第２のプロセスと並列に稼働することを記述している。
【００２４】
本発明の前述の態様および多くの付随する利点は、添付の図面と共に以下の詳細な説明を参照することによってよりよく理解されると、これらはより容易に認識されるであろう。
【発明を実施するための最良の形態】
【００２５】
図２は、クエリ、キュー、および本発明に従って生成されたプロセスの処理、および／または以下に記載のプロセスカーネルの実行など、本発明の特定の態様を実施するための適切なコンピューティングシステム環境２００の例を示している。コンピューティングシステム環境２００は、適切なコンピューティング環境の一例にすぎず、本発明の使用または機能の範囲に関して何ら限定を示唆することを意図するものではない。また、コンピューティングシステム環境２００を、例示および記載したコンポーネントのいずれか１つまたは組合せに関して何らの依存性または必要性を有するものとして解釈すべきでもない。
【００２６】
本発明は、その他の数多くの汎用または専用コンピューティングシステム環境または構成で動作可能である。本発明と共に使用するのに適した周知のコンピューティングシステム、環境、および／または構成の例には、これらに限定されないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能な民生用電子機器、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが含まれる。
【００２７】
本発明は、コンピュータによって実行されているプログラムモジュールなど、コンピュータ実行可能命令という一般的なコンテキストで説明する。一般に、プログラムモジュールには、特定のタスクを実行したり、特定の抽象データ型を実施したりするルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。
【００２８】
本発明はまた、通信ネットワークを介してリンクされた遠隔処理デバイスによってタスクが実行される分散コンピュータ環境においても実施することができる。分散コンピュータ環境において、プログラムモジュールは、メモリ記憶デバイスを含むローカルおよびリモートの両方のコンピュータ記憶媒体に配置することができる。
【００２９】
図２に示すコンピューティングシステム環境は、コンピュータ２１０の形態の汎用コンピューティングデバイスを含む。コンピュータ２１０のコンポーネントには、これらに限定されないが、処理装置２２０、システムメモリ２３０、システムメモリを含む様々なシステムコンポーネントを処理装置２２０に結合するシステムバス２２１が含まれ得る。システムバス２２１は、様々なバスアーキテクチャを使用したメモリバスまたはメモリコントローラ、周辺バスおよびローカルバスを含む、いくつかのタイプのバス構造のいずれかであってよい。例として、限定ではなく、このようなアーキテクチャには、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、拡張ＩＳＡ（Ｅｎｈａｎｃｅｄ  ＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカルバス、およびメザニンバスとしても知られるＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスが含まれる。
【００３０】
コンピュータ２１０は、通常、様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータ２１０によってアクセスできる任意の利用可能な媒体とすることができ、揮発性および不揮発性の両媒体、取外し可能および取外し不可能の両媒体を含む。例として、限定ではなく、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を含むことがある。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータなどの情報を格納するための任意の方法または技術で実装された揮発性および不揮発性、取外し可能および取外し不可能の両媒体が含まれる。コンピュータ記憶媒体には、これらに限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくはその他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）もしくはその他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくはその他の磁気記憶装置、または任意のその他のコンピュータ記憶媒体が含まれる。通信媒体は、通常、任意の情報配信媒体を含む搬送波やその他のトランスポートメカニズムなどの変調データ信号中に、コンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータを具現する。「変調データ信号」という用語は、信号中に情報を符号化するようにその特性の１つまたは複数を設定または変更した信号を意味する。例として、限定ではなく、通信媒体には、有線ネットワークまたは直接配線接続などの有線媒体、ならびに音響、ＲＦ、赤外線およびその他の無線媒体などの無線媒体が含まれる。上記のいずれかの組合せもコンピュータ可読媒体の範囲に含まれるべきである。
【００３１】
システムメモリ２３０は、読取り専用メモリ（ＲＯＭ）２３１およびランダムアクセスメモリ（ＲＡＭ）２３２などの揮発性および／または不揮発性メモリの形態のコンピュータ記憶媒体を含む。起動時などにコンピュータ２１０内の要素間の情報の転送の助けとなる基本ルーチンが入っている基本入出力システム２３３（ＢＩＯＳ）は、通常、ＲＯＭ２３１に格納されている。ＲＡＭ２３２は、通常、処理装置２２０によって直ぐにアクセス可能であり、および／または現在操作中のデータおよび／またはプログラムモジュールを収容する。例として、限定ではなく、図２は、オペレーティングシステム２３４、アプリケーションプログラム２３５、その他のプログラムモジュール２３６、およびプログラムデータ２３７を示している。
【００３２】
コンピュータ２１０はまた、その他の取外し可能／取外し不可能な揮発性／不揮発性コンピュータ記憶媒体も含む。例にすぎないが、図２には、取外し不可能な不揮発性磁気媒体との読出しまたは書込みを行うハードディスクドライブ２４１、取外し可能な不揮発性磁気ディスク２５２との読出しまたは書込みを行う磁気ディスクドライブ２５１、およびＣＤ−ＲＯＭやその他の光媒体などの取外し可能な不揮発性光ディスク２５６との読出しまたは書込みを行う光ディスクドライブ２５５を示している。この例示的な動作環境で使用することができるその他の取外し可能／取外し不可能な揮発性／不揮発性コンピュータ記憶媒体には、これらに限定されないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、固体のＲＡＭ、固体のＲＯＭなどが含まれる。ハードディスクドライブ２４１は、通常、インターフェース２４０などの取外し不可能なメモリインターフェースを介して、システムバス２２１に接続され、磁気ディスクドライブ２５１および光ディスクドライブ２５５は、通常、インターフェース２５０などの取外し可能なメモリインターフェースによってシステムバス２２１に接続される。
【００３３】
上記に説明し、図２に示したドライブおよび関連するコンピュータ記憶媒体は、コンピュータ２１０のためのコンピュータ可読命令、データ構造、プログラムモジュールおよびその他のデータの記憶を提供する。図２では、例えば、ハードディスクドライブ２４１を、オペレーティングシステム２４４、アプリケーションプログラム２４５、その他のプログラムモジュール２４６、およびプログラムデータ２４７を格納しているものとして示している。これらのコンポーネントは、オペレーティングシステム２３４、アプリケーションプログラム２３５、その他のプログラムモジュール２３６、およびプログラムデータ２３７と同じであっても異なっていてもよいことに留意されたい。ここでは、少なくとも異なるコピーであることを示すために、オペレーティングシステム２４４、アプリケーションプログラム２４５、その他のプログラムモジュール２４６、およびプログラムデータ２４７には異なる番号を付けてある。ユーザは、キーボード２６２、および、一般にマウス、トラックボールまたはタッチパッドと呼ばれるポインティングデバイス２６１などの入力デバイスを介して、コンピュータ２１０にコマンドおよび情報を入力することができる。その他の入力デバイス（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナなどが含まれることがある。これらおよびその他の入力デバイスは、システムバスに結合されたユーザ入力インターフェース２６０を介して処理装置２２０に接続されることが多いが、パラレルポート、ゲームポート、ユニバーサルシリアルバス（ＵＳＢ）など、その他のインターフェースおよびバス構造によって接続することもできる。モニタ２９１またはその他のタイプの表示デバイスも、ビデオインターフェース２９０などのインターフェースを介してシステムバス２２１に接続される。モニタに加えて、コンピュータは、スピーカ２９７やプリンタ２９６などのその他の周辺出力デバイスも含むことができ、それらは、入出力周辺インターフェース２９５を介して接続することができる。
【００３４】
コンピュータ２１０は、リモートコンピュータ２８０などの１つまたは複数のリモートコンピュータへの論理接続を用いて、ネットワーク化された環境で動作することがある。リモートコンピュータ２８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、またはその他の一般的なネットワークノードであってよく、通常、コンピュータ２１０に関連して上述した要素の多くまたはすべてを含む。ただし、図２にはメモリ記憶装置２８１のみを示している。図２に示した論理接続は、ローカルエリアネットワーク（ＬＡＮ）２７１およびワイドエリアネットワーク（ＷＡＮ）２７３を含むが、その他のネットワークを含むこともある。このようなネットワーク環境は、オフィス、企業全体のコンピュータネットワーク、イントラネット、およびインターネットにおいて一般的である。
【００３５】
ＬＡＮネットワーキング環境において使用される場合、コンピュータ２１０は、ネットワークインターフェースまたはアダプタ２７０を介してＬＡＮ２７１に接続される。ＷＡＮネットワーキング環境において使用される場合、コンピュータ２１０は、通常、インターネットなどのＷＡＮ２７３を介して通信を確立するためのモデム２７２またはその他の手段を含む。モデム２７２は、内蔵または外付けとすることができ、入出力周辺インターフェース２９５またはその他の適切なメカニズムを介してシステムバス２２１に接続することができる。ネットワーク化された環境においては、コンピュータ２１０に関連して示したプログラムモジュールまたはその一部はリモートメモリ記憶装置に記憶することができる。
【００３６】
例として、限定ではなく、図２は、リモートアプリケーションプログラム２８５をメモリ装置２８１に存在するものとして示している。図示のネットワーク接続は例示にすぎず、コンピュータ間の通信リンクを確立するためのその他の手段を使用できることを理解されよう。
【００３７】
協調して１つまたは複数のコンピューティングタスクを行うコンポーネント要素の集まりであるシステム３００を図３Ａに示す。一例として、ハードウェアシステム３４４が挙げられ、これはパーソナルデジタルアシスタント３０２、携帯電話３３４、デスクトップコンピュータ３３６など、それぞれがマイクロプロセッサ、それに関連するチップおよび回路、入出力デバイス、周辺デバイス（図示せず）を備えたいくつかのコンピューティングデバイスを備えることができる。例示を簡単にするために、後続の図に示したコンピューティングデバイスは、パーソナルデジタルアシスタント（ＰＤＡ）だけである。
【００３８】
システム３００は、オペレーティングシステムカーネル３０３Ａ、１つまたは複数のデバイスドライバ３０３Ｂ、およびプロセスカーネル３０２Ｃなど、１組のプログラムおよびデータのファイルを備えるオペレーティングシステム３４２を含む。オペレーティングシステムの下に結合されているのは、ハードウェア抽象化層３０１である。ハードウェア抽象化層３０１は、ハードウェアシステム３４４（コンピューティングデバイス３０２、携帯電話３３４、およびデスクトップコンピュータ３３６など）のデバイスにアクセスするためにプログラマによる使用のためのアプリケーションプログラミングインターフェースである。オペレーティングシステムカーネル３０３Ａは、オペレーティングシステム３４２のコアであり、メモリ、ファイル、および周辺デバイスを管理し（ハードウェア抽象化層３０１を介して）、時間および日付を維持し、ウェブサービス３０２Ａなどのアプリケーションを起動し、システム資源を割り当てるように設計されている。デバイスドライバ３０３Ｂは、ウェブサービス３０２Ａがコンピューティングデバイス３０２などのデバイスと通信することを可能にする別個のコンポーネントである。プロセスカーネル３０２Ｃは、ウェブサービス３０２Ａをプロセス３０２Ｂとして表し、プロセス３０２Ｂを管理し、プロセス３０２Ｂがその他のプロセスと通信するのを容易にする（後述）。オペレーティングシステムカーネル３０３Ａ、デバイスドライバ３０３Ｂ、およびプロセスカーネル３０２Ｃは、オペレーティングシステム３４２のカーネルモード部分に存在し、一方、ウェブサービス３０２Ａおよびプロセス３０２Ｂは、オペレーティングシステム３４２のユーザモード部分３４６に存在する。あるいは、プロセスカーネル３０２Ｃは、ＣＯＭ（コンポーネントオブジェクトモデル）などのその他のシステムソフトウェアコンポーネント３０５、３０７（図３Ｂ）の下に結合されている場合には、ユーザモード部分３４６に存在することができる。
【００３９】
本発明に従って使用されている「プロセス」という用語は、アクションを行うことによって展開する機能を有するか、またはその他のプロセスを展開させるようにする１つまたは複数の計算エンティティの動的表現を意味する。言い換えれば、「プロセス」という用語は、計算エンティティの性質の二重性の１つを表す。計算エンティティが停止している場合、プログラムをビューするなどしてそれを調べることができる。計算エンティティが（プロセスとして）可動な場合、それを見ることはできないが、その挙動は、本発明に従って形成されたプログラミング言語４００によって表現し、検証することができる（後述）。
【００４０】
ウェブサービス３０２Ａは、ある特定のサービスに特化するように設計されている。ウェブサービス３０２Ａは、より大きな機能を得るために、ウェブサービス３０２Ａの範囲内にないサービスを提供することができるその他のウェブサービスに助けを求めることができる。その他のウェブサービスを見つけるために、ウェブサービス３０２Ａは、ディレクトリフレームワーク３２６と通信することができる。ディレクトリフレームワーク３２６は、インターネット上のウェブサービスを捜し出し、登録する方法を提供するプラットフォームに依存しない１つのソフトウェア（ディレクトリフレームワーク）である。ディレクトリフレームワーク３２６は、いくつかの登録ウェブサービスを収容し、それらのウェブサービスに関する詳細な技術的情報を含むストア３３０を含む。ディレクトリフレームワーク３２６のディスカバリコンポーネント３２８は、プロセス３０２Ｂとストア３３０の間のブローカとして働き、所望のウェブサービスを捜し出す。
【００４１】
ディレクトリフレームワーク３２６がウェブサービス３０２Ａによって要求されている適切なウェブサービスを見つけると、ウェブサービス３０２Ａは、発見されたウェブサービスと対話を始めて所望のタスクを成し遂げることができる。図３Ｂは、発見されたウェブサービス３０４Ａを示している。プロセスカーネル３０４Ｃは、ウェブサービス３０４Ａをプロセス３０４Ｂとして表し、このプロセスは、キュー３１０などの通信手段を介してプロセス３０２Ｂと対話して、ウェブサービス３０２Ａ、３０４Ａのタスクを成し遂げる。
【００４２】
プロセスがそれを介して通信を行うキュー３１０は、データベース、チャネル、またはその他の適切な構造化ストアなど、様々な形態を取ることができる。コンピューティングデバイス３０２、３０４は、地理的に互いにかなり離れた場所に配置されていることがあるため、プロセス３０２Ｂ、３０４Ｂは共有メモリを介して通信することはできない。キュー３１０などの適切な通信手段は、プロセス３０２Ｂ、３０４Ｂが、異なる時間に稼働しながら、一時的にオフラインになり得る異種ネットワークおよびシステム上で通信できるようにする技術を含む。プロセス３０２Ｂ、３０４Ｂは、通信手段にメッセージを送り、通信手段からのメッセージを読む。通信手段は、保証されたメッセージの配送、効率的なルーティング、セキュリティ、およびプライオリティベースのメッセージングを提供することができる。さらに、通信手段を使用して、ハイパフォーマンスを要求する非同期および同期の両シナリオに対するソリューションを実施することができる。上述のように、適切な通信手段の具体例には、構造化ストアの中でも特に、チャネル、キュー、またはデータベースが含まれる。キュー３１０〜３１６がデータベースの場合、それらは、それぞれがサーチ、ソート、再結合、その他の処理機能のための１組の操作と共にフィールドを収容するレコードで構成されたファイルであり、それらは複数の表に編成され、それぞれが、行と列の交差によって形成されるセルのそれぞれをデータが占めているか、または占める可能性がある行と列で特徴付けられたデータ構造である。
【００４３】
プロセスカーネル３０２Ｃ、３０４Ｃの内部アーキテクチャは、プロセスを定義し、プロセス間の対話を規定するためのソフトウェアコンポーネントを収容するプロセスバーチャルマシン３０２Ｃ１、３０４Ｃ１、クエリを定義し、クエリおよびキューの間の対話を規定するためのソフトウェアコンポーネントを収容するクエリバーチャルマシン３０２Ｃ３、３０４Ｃ３、クエリ、キュー、プロセスの間の対話を規定するためのソフトウェアコンポーネントを収容する反応バーチャルマシン３０２Ｃ２、３０４Ｃ２、および、コンピューティングデバイス３０２、３０４上のシステムソフトウェアコンポーネント３０５、３０７（とりわけ、ＣＯＭおよびオペレーティングシステムなど）の具体物から、プロセスカーネル３０２Ｃ、３０４Ｃを分離するためのソフトウェアコンポーネントを収容する遷移バーチャルマシン３０２Ｃ４、３０４Ｃ４を含む。
【００４４】
コンピューティングデバイス３０２、３０４は、ローカルエリアネットワーク、ワイドエリアネットワーク、または無線ネットワーク３３８を介して、対話し、通信し、情報を交換する。プロセス３０２Ｂ、３０４Ｂは、キュー３１０を介して通信して、メッセージ３１８などのメッセージを交換する。πカリキュラスおよびその変形を実装している以前のシステムとは異なり、本発明に従って形成されるシステム３００は、メッセージ３１８などのメッセージが、プロセス３０２Ｂ、３０４Ｂ間の交換において、プロセスカーネル３０２Ｃ、３０４Ｃによってプロセスとして表されうるようにする。これによって、数ある中でも特にＡＰＩの呼出し順など、プログラムまたはウェブサービスの協調的な側面を、プロセス３０２Ｂ、３０４Ｂ間で表現できるようになる。
【００４５】
図３Ｃは、システム３００を、互いに通信することができ、ユーザにとっては共有ハードウェア、ソフトウェアおよびデータの単一の大きくてアクセス可能な「ストアハウス」の一部に見える、数多くのコンピューティングデバイス３０２、３０４、３０６、３０８を備えた非集中型ネットワークとして示している。システム３００は、コンピュータ科学者の用語法で言えば、ダムクライアントがメインフレームなどの単一のスマートセントラルコンピュータに接続する、集中型またはモノリシックのシステムとは概念的に反対である、分散システムである。システム３００は、高度に分散された並行プロセス３０２Ｂ、３０４Ｂ、３０６Ｂ、３０８Ｂがコンピューティングデバイス３０２〜３０８上で並列に対話する動的ネットワークトポロジである。
【００４６】
プロセス３０２Ｂ〜３０８Ｂは、メッセージまたはクエリとしてキュー３１０〜３１４に送られた情報を互いに表現するために協調する。通信手段を介して送られた情報の断片には、実行の順序付け、データのタイミング、サービスの品質、ならびに、データの解釈またはデータに関する操作の実行を容易にするような方法でデータを収容し、データを記述するカスタマイズ可能なタグベースの言語から形成された組織体系の、プロセス３０２Ｂ〜３０８Ｂ間での受け渡しが含まれる。適切なカスタマイズ可能なタグベースの言語の１つとして拡張マークアップ言語（ＸＭＬ）が挙げられるが、本発明はこの言語に限定されるわけではない。その他のカスタマイズ可能なタグベースの言語を使用することができる。
【００４７】
プロセス３０２Ｂ〜３０８Ｂ間の協調的な通信は、本発明に従って形成されるプログラミング言語４００（図４）によって提供される。言語４００は、πカリキュラスの高次の変形である。言い換えれば、言語４００はプロセスベースの言語である。より詳細には、以下に説明するその他のプロパティに加えて、言語４００は、「活性（ｌｉｖｅｎｅｓｓ）」をプログラム的に検出できる能力を有する。活性とは、プロセスが活きていることの指示である。プログラムが、行うように設計されていることを必ず行うように信頼されるという目的のために、この特質はプログラム的に検証される必要がある。言語４００で書かれたウェブサービス３０２Ａなどのプログラムは、「活性」をプログラム的に検証することができる。その他のプロパティには、プロセス３０２Ｂ〜３０８Ｂのセキュリティ、およびリソースアクセスのランタイムエラーを分析する能力が含まれる。セキュリティの問題には、コンピューティングデバイス３０２〜３０８およびそれらのデータを損害または喪失から保護することが含まれる。特に、多くの人々によって複数のキュー３１０、３１２、３１４、３１６を通じてアクセスされるシステム３００のような非集中型ネットワークの場合、セキュリティの１つの重視すべき主な点は、無許可の個人によるアクセスの防止である。言語４００で書かれたウェブサービス３０２Ａを検証して、信頼できないウェブプログラムまたは信頼できないコンピューティングデバイスによって誘引されるセキュリティの問題を検出することができる。
【００４８】
言語４００の正式な数学的定義は、付録にある。言語４００は、文法、構造的に同等なものについての規則、操作的意味論についての規則を含む。言語４００の文法は、クエリおよびプロセスの構文要素をひとまとめにして許容されるプログラミングステートメントを形成する方法を定義する規則の体系である。言い換えれば、言語４００の文法で正しく表現できない限り、ＡＰＩ呼出しなど、あるプロセスから別のプロセスに概念を伝達することはできない。表現式が正しく形成されると、意味論の規則は、その表現式を意味と結び付ける。プロセスは動的であるため、言語４００は操作的意味論を使って意味をプロセスに結合する。言い換えれば、プロセスは、他のプロセスと動作または対話することによって展開する。言語４００の表現式の意味を理解することは、その操作を理解することに直接的に関係する。構造的同等性についての規則は、言語４００の操作的意味論をある表現式を別の表現式にたとえることができるという点で簡略化できるようにする。このように、操作的意味論についての規則は、表現式の置換（ｐｅｒｍｕｔａｔｉｏｎｓ）に適用することができるので、その数を少なくしておくことができる。
【００４９】
言語４００はいくつかの主要な構文カテゴリを有する。これらは、異なる時点または同時に稼働しているプロセスがメッセージを介して通信を行うことを可能にする、キュー、データベース、通信チャネル、または任意の構造化ストアを表すキュー構文４０２、メッセージの組立および解体、キュー構文４０２によって表された構造化ストアの操作、メッセージパターンの検出を行うためのデータ操作言語で書かれた命令を表すクエリ構文４０４、ならびに、ＡＰＩなどの名前だけでなくキュー構文４０２によって表される構造化ストアを介してプロセスもメッセージとして交換することができる計算エンティティの動的側面を表すプロセス構文４０６である。キュー構文４０２、クエリ構文４０４、プロセス構文４０６は、一緒になって言語４００の主要な構文要素を形成する。言語４００の構文要素４０２〜４０６は、単独に使用することもできるし、順列で組み合わせて、プロセス３０２Ｂ〜３０８Ｂなどのプロセス間の協調するニュアンスを表現することもできる。クエリに関連する構文規則（図１１Ｃ〜１１Ｆおよび付録の１．１節を参照して詳細に説明）、構造的同等の規則（図１１Ｊおよび付録の２．１節を参照して以下により詳細に説明）、および操作的意味論規則（図１１Ｏ〜１１Ｒおよび付録の３．１節を参照して以下により詳細に説明）は、クエリバーチャルマシン３０２Ｃ３、３０４Ｃ３の中に配置される。プロセスに関連する構文規則（図１１Ｇ〜１１Ｉおよび付録の１．２節を参照してより詳細に説明）、構造的同等の規則（図１１Ｋ〜１１Ｎおよび付録の２．２節を参照して以下により詳細に説明）、および操作的意味論規則（図１１Ｓ〜１１Ｖおよび付録の３．２節を参照して以下により詳細に説明）は、プロセスバーチャルマシン３０２Ｃ１、３０４Ｃ１の中に配置される。反応バーチャルマシン３０２Ｃ２、３０４Ｃ２は、キュー、クエリ、およびプロセスがそれによって互いに反応する方法を定義する操作的意味論規則を収容する。
【００５０】
プログラミング言語４００は、並列に稼働し、キュー３１０〜３１４などの通信手段を介して対話するプロセス３０２Ｂ〜３０８Ｂなどのプロセスを記述するために表現式の形成を可能にする。数学的には、ＴとＰがプロセスの場合、Ｔ｜Ｐという表現は、プロセスＴ、Ｐが並列に稼働し、互いにまたは外界と、通信手段に則って通信している可能性を記述している。
【００５１】
キュー３１０〜３１４は、名前（それぞれ「Ｘ」、「Ｙ」、「Ｚ」および「Ｗ」に対応）によって表される。プログラミング言語３０１によって、とりわけ、プロセス３１８〜３２４など、特定のクラスのプロセスの受け渡しを、キュー３１０〜３１４を介するメッセージとして表現することができる。プロセス３１８〜３２４は、データの解釈またはデータに関する操作の実行を容易にするような方法でデータを収容し、データを記述する、カスタマイズ可能なタグベースの言語から形成された組織体系（ｏｒｇａｎｉｚａｔｉｏｎａｌ  ｓｃｈｅｍｅ）を具現する。組織体系の一例としてクエリが挙げられる。組織体系の別の例としてメッセージが挙げられる。組織体系のさらなる例としてＸＭＬ文書が挙げられる。
【００５２】
クエリは、データを操作するためデータおよび情報を含む。次の例を検討してみる。コンピューティングデバイス３０２が出版社のコンピュータを表し、コンピューティングデバイス３０４が書店のコンピュータを表す。出版社も書店も、共に、本の著者、書名、および発行日に関する情報について、独自のタグをＸＭＬで定義する独立した能力を有するものとする。このような本情報は、適切なタグを使ってＸＭＬ文書に編成することができる。この情報は、発行者のコンピューティングデバイス３０２または書店のコンピューティングデバイス３０４によって、そのＸＭＬ文書を、プロセスカーネル３０２Ｃ〜３０Ｃにより、プロセス３０２Ｂとプロセス３０４Ｂの間でキュー３１０を介して通信されるプロセス３１８などのプロセスとして表されるクエリに移し変えることによって交換される。
【００５３】
以前のπカリキュラスの変形では、ＸＭＬ文書などの構造化情報を、キュー３１０などの通信手段を介して通信することができない。しかし、アプリケーションの実際のパフォーマンスは、ある程度の構造化情報の交換を時として必要とする。好例として、ＡＰＩの呼出し順を表現する構造化情報が挙げられる。別の好例として、上記の出版社と書店について説明した例が挙げられる。プログラミング言語４００によって、多次元データ（データ構造）を、プロセス３０２Ｂ〜３０８Ｂ間で受け渡されるメッセージとして通信される、ロセス３１８〜３２４などのプロセスに具現することができる。言語４００によって、並行で分散した非集中型ネットワークにおけるキューを介したプロセス間の組織体系（データの解釈やデータに関する操作の実行を容易にするような方法でデータを収容し、データを記述するカスタマイズ可能なタグベースの言語で書かれた）の交換を容易にするための環境をつくることができる。
【００５４】
図５は、キュー３１０（Ｘ）、クエリ５０４、５０６（Ｑ０、Ｑ１）、およびプロセス３０２Ｂ、３０４Ｂ（Ｔ、Ｐ）に関係する構文表現式を視覚的に示す。キュー３１０〜３１６には、１つまたは複数のクエリ５０２が格納され、これは、構造化データまたは明白な構造を持たない名前を具現するプロセスである。ＸＭＬ文書５００Ａなどの構造化データファイルを、キュー３１０を介してプロセス３０２Ｂからプロセス３０４Ｂに通信するために、プロセス３０２Ｂは、ＸＭＬ文書５００Ａをクエリ５００Ｂに変換し、そのクエリ５００Ｂをキュー３１０に書き込む。クエリ５００Ｂは、プロセスカーネル３０２Ｃ〜３０８Ｃによってプロセスとして扱われる。以前のπカリキュラスの変形とは異なり、プログラミング言語４００は、クエリ５００Ｂなどのプロセスが、キュー３１０などの通信手段を通過することを可能にする。クエリ５００Ｂは、ＸＭＬ文書５００Ａの構造化された内容も収容するという点において、純粋名以上のものを収容する。クエリ５００Ｂを得るために、プロセス３０４Ｂはキュー３１０を読む。
【００５５】
プログラミング言語４００は、クエリの組立および解体、キューの操作、およびクエリの中のパターンの検出のために使用される１組のクエリ操作を提供する。その他のクエリ操作を使用して、メッセージをキューの中に入れ、キューからメッセージを取り出し、そして既存のメッセージから新しいメッセージを構築する。クエリは、ヘッドとボディの２つの部分を備える。クエリのヘッドは、１組のパラメータおよびそれらの対応する型を定義する。ボディは１組のバインディングを有する。クエリは、そのパラメータを引数にバインドし、そのバインディングのセットをアクティブ化することによって呼び出される。バインディングは、２つの項の間の関係を定義する。すべての項がバインドすることができるわけではない。有効なバインディングは、そのバインディングがある特定の型の項をその相補的な型の項にバインドする場合に存在する。クエリを従来のプロシージャにたとえることができる。クエリのヘッドはプロシージャのシグニチャのようなものである。クエリのボディはプロシージャの１組のプログラミングステートメントのようなものである。そして各バインディングは、プロシージャのシグニチャのパラメータ中に格納されたデータを使用するか、またはプロシージャのシグニチャのパラメータ中にデータを配置するプログラミングステートメントである。
【００５６】
数学的には、キュー３１０、クエリ５００Ｂ、およびプロセス３０４Ｂの間の関係は、構文的に、Ｘ［Ｑ０］．Ｐとして表現することができ、Ｘはキュー３１０であり、Ｑ０はクエリ５００Ｂであり、Ｐはプロセス３０４Ｂを表し、このプロセスはクエリＱ０がキューＸに書きこまれた後の継続点である。このように、言語学的には、数学的表現式Ｘ［Ｑ０］．Ｐは、クエリ５００Ｂをキュー３１０にデポジットするプロセスであり、その後に、プロセス３０４Ｂの実行により継続されることを記述している。プログラミング言語４００のフレームワークでは、Ｑ０とＰの両方が数学表記Ｘ［Ｑ０］．Ｐにおけるプロセスである。プログラミング言語４００は、キューＸを介してメッセージとして受け渡すことができるプロセスのサブセット（または特定のクラス）を識別する。このサブセットはクエリを含み、そのそれぞれが、ＸＭＬ文書に含まれているもののような、カスタマイズ可能なタグベースのデータ構造に相関されている。
【００５７】
言語４００の１つの主な側面は、クエリおよびプロセスの間の構造的同等性を判断するためのその等式法則の集まりである。言語４００のこれらの等式法則により構造的同等性を判断するプロセスは、２つのプログラムや２つのソフトウェア仕様などの２つのプログラム的なドキュメント間の取るに足りない相違から解放して、それらがあらゆる関連する点において合致するかどうかを確かめる。これらの構造的同等性の法則によって、言語４００の操作的意味論を、上述のように、簡略化することができる。
【００５８】
図６Ａは、この説明に適した言語で書かれたプログラム６０２を示す。プログラム６０２は、ＣやＣ＋＋などの特定の言語の実行の開始点であるｍａｉｎ（）関数を含む。最初の丸括弧間のネスティングは、テスト条件（Ａ＝＝７）を収容するＩＦステートメントである。テスト条件は、変数Ａが値７に等しいかどうかを判断する。テスト条件が真であれば、２番目の丸括弧内に入れられたプログラミングステートメントが実行される。第２の丸括弧の中には２つのプログラミングステートメントがある。第１のプログラミングステートメントは、引数として変数Ｐ０をとるｆｏｒｋ（）関数を呼び出す。特定の言語におけるｆｏｒｋ（）関数は、親プロセスが開始された後に並行システム中の子プロセスを開始する。この場合、子プロセスは引数Ｐ０によって表される。ｆｏｒｋ（）関数の呼出しの後、子プロセスＰ０はプログラム６０２を実行している親プロセスと並列に稼働する。第２のプログラミングステートメントもｆｏｒｋ（）関数の呼出しを収容するが、引数としてＰ０をとる代わりに、この第２のｆｏｒｋ（）関数の呼出しは、引数として変数Ｐ１をとる。引数Ｐ１によって表される別の子プロセスは、第２のｆｏｒｋ（）関数の呼出しと共に開始される。子プロセスＰ０、Ｐ１は、第２の丸括弧の閉じ括弧からプログラムフローの出口で互いに並列に稼働する。
【００５９】
別のプログラム６０４は、多くの点でプログラム６０２と同様であるが、いくつかの相違がある。相違の１つは、変数Ａの代わりに変数Ｂを収容するプログラム６０４のＩＦステートメントのテスト条件である。別の相違は、子プロセスＰ１が、子プロセスＰ０の呼出しの前に、ｆｏｒｋ（）関数の第１の呼出しと共に開始されることである。これらの相違にもかかわらず、両方のＩＦステートメントのテスト条件が真であるならば、プログラム６０２、６０４両方の論理フローは、最終的にプログラム６０２、６０４両方のｆｏｒｋステートメントに到達することになる。このように、変数Ａ、Ｂという名前の違いは無視でき、プログラム６０２、６０４の論理構造に影響を与えない。さらに、子プロセスＰ０、Ｐ１は並列に稼働するため、それらの呼出しシーケンスも無視できる。
【００６０】
上述のように、プログラム６０２は、それぞれが構造的同等性の分析の妨げになる多種多様な文法構成を収容する多くの異なるプログラミング言語で書くことができる。言語４００を用いて、プログラム６０２は、プログラム６０２の文法的に固有のものから離れた特質によって表現することができる。例えば、プログラム６０２のエッセンスは、子プロセスＰ０、Ｐ１を並列に実行することである。このエッセンスは、プログラム６０２を仕様６０２Ａに翻訳することによって、言語４００で表現することができる。プロセスＰ０、Ｐ１の並列実行は、プログラム６０２Ａにおいて「Ｐ０｜Ｐ１」として表現される。ステートメント「Ｐ０｜Ｐ１」は、タグ＜Ｉ＿ＤＯ＞とそのタグに対応する終了タグ＜／Ｉ＿ＤＯ＞の間にネストされる。
【００６１】
子プロセスＰ０が別の子プロセスＰ２と並列に実行されることが望まれるサービスをプロセス３０２Ｂが要求すると仮定する。この要求は、言語４００で書かれた仕様３０２Ｄの中に示すようなステートメント「Ｐ０｜Ｐ２」によってキャプチャされる。ステートメント「Ｐ０｜Ｐ２」は、タグ＜Ｉ＿ＮＥＥＤ＞とそのタグに対応する終了タグ＜／Ｉ＿ＮＥＥＤ＞の間に置かれる。さらに、プロセス３０２Ｂがディスカバリコンポーネント３２８から仕様６０２Ａを入手して、プロセス３０２Ｂが成し遂げることを望むタスクにプログラム６０２が適しているかどうかを判断すると仮定する。構造的同等性の分析を用いて、プロセス３０２Ｂは、プログラム６０２Ａが要求されたサービスを仕様３０２Ｄによって指定された通りに提供することができないであろうことを素早く判断することができる。これは、プログラム６０２が子プロセスＰ０、Ｐ１を並列に実行するのに対して、プロセス３０２Ｂは子プロセスＰ０、Ｐ２が並列に稼働することを要求するためである。
【００６２】
言語４００の１組の等式法則のからの１つの等式法則によって、見たところ別個のキューを融合することができ、それによって、１つのキューを動作中の別のキューの代わりに用いることができる。これは付録の２．２節で代入同等性（ｓｕｂｓｔｉｔｕｔｉｏｎ  ｅｑｕｉｖａｌｅｎｃｅ）と呼ばれている。図７Ａに示すように、プロセス３０２Ｂは、メッセージの送受信（またはクエリの書込みおよび読出し）にキュー３１０（キューＸ）を使用する。キュー３１０を使う代わりに、プロセス３０４Ｂは、メッセージの送受信（またはクエリの書込みおよび読出し）にキュー７０２（キューＸ’）を用いて通信する。クエリが、名前Ｘが名前Ｘ’にバインドされる（ｎａｍｅＸ：＝：ｎａｍｅＸ’）キュー７０２に配置されると仮定する。この場合、演算子：＝：は、言語４００の用語法ではバインディング演算子である。これは、キュー３１０が本質的にキュー７０２と融合され、そのため、プロセス３０２Ｂ〜３０４Ｂが、キュー３１０などの同じキューに関して操作または通信できるようにすることを表している。図７Ｂを参照する。言語４００の等式法則を用いて、プロセス３０２Ｂ、３０４Ｂは、キュー（または、その他の構造化ストアの中でも特にデータベースまたはチャネル）にアクセスする新たな方法を発見することができる。
【００６３】
以前のπカリキュラスの変形の入出力メカニズム（Ｉ／Ｏ）は非対称である。次の数学的な例を検討する。
【００６４】
【数１】
2005525640.tif 000003
【００６５】
ここで、
【００６６】
【数２】
2005525640.tif 000004
【００６７】
およびＵは同じリンクを参照するが、
【００６８】
【数３】
2005525640.tif 000005
【００６９】
は、リンクが、Ｘなど、何かを出力していることを表し、Ｕは、リンクが、Ｙなど、何かを入力していることを表す。また、Ｘは出力データであり、Ｙは入力データである。Ｐ、Ｑはプロセスであり、これらのプロセスは、式
【００７０】
【数４】
2005525640.tif 000006
【００７１】
および｜Ｕ（Ｙ）が実行された後に継続する。非対称性は、出力データとしてのＸがチャネルＵにバインドされないのに対し、入力データとしてのＹがチャネルＵにバインドされるという事実から生じる。用語「バインドされる」とは、Ｙの動作上の範囲が、Ｙがバインドされるリンクに制限されることを意味する。言い換えれば、ウェブサービス１１６
【００７２】
【数５】
2005525640.tif 000007
【００７３】
が、ウェブサービス１０８が呼び出されることになるＡＰＩでウェブサービス１０８と通信した後は、ウェブサービス１１６はそのＡＰＩについての知識を失う。非対称Ｉ／Ｏは、システム３００などの分散ネットワークトポロジの形成を妨げる。本発明は、対称Ｉ／Ｏを提供することによって、上述の問題を克服し、または低減する。
【００７４】
図８は、本発明に従って形成されたシステム３００の対称Ｉ／Ｏの態様を示す。プロセス３０２Ｂが数学的に
【００７５】
【数６】
2005525640.tif 000008
【００７６】
として定義されていると仮定する。ここで、Ｔはプロセス３０２Ｂであり、
【００７７】
【数７】
2005525640.tif 000009
【００７８】
は何かを出力しているキュー３１０を参照し、
【００７９】
【数８】
2005525640.tif 000010
【００８０】
は何かを出力しているキュー３１２を参照し、
【００８１】
【数９】
2005525640.tif 000011
【００８２】
は何かを出力しているキュー３１６を参照し、Ｓはプロセス３０６Ｂを参照する。さらに、プロセス３０４Ｂは、数学的にＰ＝Ｘ．Ｙ．Ｚ．Ｒとして定義される。ここで、Ｐはプロセス３０４Ｂであり、Ｘは何かを入力しているキュー３１０を参照し、Ｙは何かを入力しているキュー３１２を参照し、Ｚは何かを入力しているキュー３１４を参照し、Ｒはプロセス３０８Ｂを参照する。プロセスＴがプロセスＰと並列に実行されている、すなわち数学的にはＴ｜Ｐであると仮定する。実行において、プロセス
【００８３】
【数１０】
2005525640.tif 000012
【００８４】
はキュー３１０（Ｘ）に配備され、プロセスＸ．Ｙ．Ｚ．Ｒもキュー３１０に配備される。これら２つのプロセス、
【００８５】
【数１１】
2005525640.tif 000013
【００８６】
およびＸ．Ｙ．Ｚ．Ｒがキュー３１０で反応した後、プロセス
【００８７】
【数１２】
2005525640.tif 000014
【００８８】
、Ｙ．Ｚ．Ｒがキュー３１２（Ｙ）に配備される。この時点で、キュー３１２において、クエリが稼動中のプロセスと並列に発行され、キュー３１６をキュー３１４にバインドする、すなわち、数学的には＜＞（Ｗ：＝：Ｚ）であると仮定する。このようなクエリの発行と共に、キュー３１６（Ｗ）がキュー３１４（Ｚ）と融合される。Ｗにおけるいかなる入力または出力もＺに通信されることになり、対応して、Ｚにおけるいかなる入力または出力もＷに通信されることになり、それによって分散ネットワークトポロジが形成される。チャネル３１２から、別のサブプロセス
【００８９】
【数１３】
2005525640.tif 000015
【００９０】
がキュー３１６（Ｗ）に配備され、別のサブプロセスＺ．Ｒがキュー３１４（Ｚ）に配備される。キュー３１６から、プロセス３０６Ｂ（プロセスＳ）が継続のポイントとして配備され、実行される。また、キュー３１４から、プロセス３０８Ｂ（プロセスＲ）が、別の継続のポイントとして配備され、実行される。
【００９１】
言語４００は、その構文に加えて、プロセスの展開を記述するための１組の規則を有している。言い換えれば、これらの規則は、言語４００の操作的意味論を定義する。言語４００の操作的意味論は、構文要素４０２〜４０６とそれらの意図される意味の間の関係を記述する。このように、言語４００で書かれたプログラムステートメントは、構文的には正しくても意味論的には正しくないということがある。言い換えれば、言語４００で書かれたステートメントは、受容できる形態であるが、誤った意味を伝達する可能性がある。言語４００の操作的意味論の一例として、図９Ａ〜９Ｂ（反応バーチャルマシン３０２Ｃ２、３０４Ｃ２に実装）によって図示した通信簡約規則（ｃｏｍｍｕｎｉｃａｔｉｏｎ  ｒｅｄｕｃｔｉｏｎ  ｒｕｌｅ）がある。クエリ９０２Ａ（Ｑ０）は、プロセス３０２Ｂ（Ｔ）によってデータベース９０４（Ｖ）にサブミットされる準備ができている。
【００９２】
議論を簡単にするために、クエリ９０２Ａをデータベースのフォームとして示す。フォームは、データと、「穴」を収容し、この「穴」はそのデータがデータベース９０４によって計算されるときに満たされることになる。例えば、クエリを、答えられるべき問いの情報を有するその問いにたとえることができる。このように、情報はフォームの中のデータであり、答えは、そのフォームの中の穴を埋めるべきデータである。別の例として、フォームは、十分な情報があれば代数的に解くことができる線形連立方程式にたとえることができる。クエリ９０２Ａをデータベース９０４にサブミットした後、プロセスは、プロセス３０６Ｂ（Ｓ）の実行を続ける。数学的には、フォーム９０２Ａをデータベース９０４にサブミットし、プロセス３０６Ｂで継続するプロセスはＶ［Ｑ０］．Ｓとして記述することができる。ここで、Ｖはデータベース９０４を表し、Ｑ０はフォーム９０２Ａを表し、Ｓはプロセス３０６Ｂを表す。
【００９３】
フォーム９０２Ａをデータベース９０４にサブミットしてプロセス３０６Ｂで継続する代わりに、プロセスがフォーム９０２Ｃをデータベース９０４にサブミットし、その後プロセス３０８Ｂで継続すると仮定する。数学的には、これをＶ［Ｑ１］．Ｒとして記述することができる。ここで、Ｖはデータベース９０４を表し、Ｑ１はフォーム９０２Ｃを表し、Ｔはプロセス３０８Ｂを表す。
【００９４】
プロセスＶ［Ｑ０］．Ｓを実行するか、プロセスＶ［Ｑ１］．Ｒを実行するかの選択があった場合、このような選択は、フォーム９０６Ａ（Ｑ）がデータベース９０４にサブミットされていることに簡約することができ、その後にプロセス３０６Ｂ、３０８Ｂの両方が並列に稼働する。図９Ｂを参照されたい。数学的には、この結果はＶ［Ｑ］．（Ｓ｜Ｒ）として表現される。フォーム９０６Ａの形成は、クエリ９０６Ａがカノニカル形式（後述）であるようにフォーム９０２Ａ、９０４Ａを結合することによって引き起こされる。それまでは２つの選択肢（Ｖ［Ｑ０］．ＳまたはＶ［Ｑ１］．Ｒ）の間の１つの選択しかできなかったのに対し、２つの別個の異なるフォーム９０２Ａ、９０２Ｃからクエリ９０６Ａを形成することによって、単一のフォーム９０６Ａをデータベース９０４にサブミットすることができ、プロセス３０６Ｂ、３０８Ｂの両方が活きて、並列に実行する。これを理解する１つの方法として、フォーム９０２Ａを、３つの項を有する第１の線形連立方程式にたとえ、フォーム９０２Ｃを、３つの項を有する第２の線形連立方程式にたとえる。線形代数の数学から、この２つの線形連立方程式に対する解はないと結論付けることができるが、追加データが与えられると（別の線形連立方程式）すべての項が解けるようなフォームに、２つの線形連立方程式を計算することができる。フォーム９０６Ａは、さらなるデータなしにさらなる計算を行うことができない２つのフォーム９０２Ａ、９０２Ｃの計算を表す。
【００９５】
図１０Ａ〜１０Ｃは、プロセスの展開についての別の操作的意味論規則であるリフトされた規則（ｌｉｆｔｅｄ  ｒｕｌｅ）（図１１Ｕおよび付録の３．２節を参照してより詳細に説明）を図示している。図１０Ａに示すように、プロセス３０２Ｂは、データベース１００６、９０４と別々に通信して、メッセージ（またはクエリ）を送信し、受信する。データベース１００６を「Ｕ」と名付け、データベース９０４を「Ｖ」と名付ける。プロセス３０６Ｂが、名前「Ｕ」と名前「Ｖ」の間の関係を表現するバインディングが入っているクエリ１００２Ａをデータベース９０４にサブミットすると仮定する。クエリ１００２Ａをサブミットすると、プロセス３０２Ｂは、名前「Ｕ」と「Ｖ」が同じデータベースを参照することを悟ることになる。言い換えれば、プロセス３０２Ｂによってデータベース１００６にデポジットされたメッセージはデータベース９０４に転送されることになり、対応して、プロセス３０２Ｂによってデータベース９０４にデポジットされたメッセージはデータベース１００６に転送されることになる。名前「Ｕ」と「Ｖ」が同じデータベースを参照すること、あるいはプロセス３０２Ｂによって送信されたメッセージが互いに対して転送されることになる２つの別個のデータベースがあることをプロセス３０２Ｂがクエリ１００２Ａから解釈することができる前に、満たされなければならない特定の条件がある（以下で図１１Ｕを参照して詳細に説明）。
【００９６】
図１０Ｃに、いくつかの地理的エリアに散在している複数のコンピューティングデバイスを示しているシステム１０１０を示す。プロセス３０２Ｂは、サンフランシスコの地理的エリア１０１２にあるコンピューティングデバイス３０２上で実行される。プロセス３０４Ｂは、シアトルの地理的エリア１０１６にあるコンピューティングデバイス３０４上で実行され、プロセス３０８Ｂは、ポートランドの地理的エリア１０１４にあるコンピューティングデバイス３０８上で実行される。プロセス３０２Ｂは、プロセス３０４Ｂの助けを得て、特定のタスクを実行する。プロセス３０４Ｂは、プロセス３０２Ｂに知られずに、プロセス３０２Ｂによって指定されたすべてのタスクを成し遂げることはできない。このように、プロセス３０４Ｂは、プロセス３０８Ｂの助けを請け負って、プロセス３０４Ｂの範囲内にないタスクを行う。クエリ１００２Ａなどのクエリをデータベース１００６に発行すると、メッセージ１０２０など、プロセス３０２Ｂからデータベース１００６に来たメッセージは、プロセス３０８Ｂが要求されたタスクを行うことができるように自動的にデータベース９０４に転送されることになる。あるいは、プロセス３０２Ｂは、直接、データベース９０４と通信して、メッセージを交換することができる。しかし、プロセス３０２Ｂは、そうする必要はなく、データベース１００６と通信し続けることができる。
【００９７】
図１１Ａ〜１１Ｖは、プロセスカーネル３０２Ｃなどのプロセスカーネルによって、ウェブサービス３０２Ａなどのプログラム（以下、「プログラム３０２Ａ」）をコンパイルまたは実行するための方法１１００を示す。プログラム３０２Ａは言語４００で書かれている。プログラムの分析において、方法１１００は、クエリ表現式およびプロセス表現式の構造およびコンテキストを規定する構文規則のセットを実行することになる。クエリ表現式およびプロセス表現式の構造的同等性を規定する等式法則のセットも、プロセスカーネル３０２Ｃによって実行される。言語４００はまた、言語４００の構文規則のセットに従って正しく形成されたクエリ表現式およびプロセス表現式の意味を規定する操作的意味論規則のセットも含む。これら操作的意味論規則のセットは、プロセスカーネル３０２Ｃによって実行される。明確にするために、次の方法１１００の説明では、図３Ａ〜３Ｃに示したシステム３００に関連して図示した様々な構成要素を参照する。
【００９８】
開始ブロックから、方法１１００は、継続端子（「端子Ａ」）と出口端子（「端子Ｂ」）の間で定義される１組の方法ステップ１１０２に進む。この１組の方法ステップ１１０２は、キュー構文４０２から形成されるクエリステートメントの構造および内容を規定する構文規則に対して、プログラムを走らせる。端子Ａ（図１１Ｃ）から、方法１１００は、ブロック１１１４に進み、そこで、プロセスカーネル３０２Ｃがプログラム３０２Ａからクエリ表現式（Ｑ）を得る。次に、決定ブロック１１１６で、プロセスカーネル３０２Ｃは、クエリＱ表現式が構文形式＜Ｔ＊＞（Ｃ＊）を有するかどうかを決定する。
【００９９】
言語４００で書かれた各クエリは構文形式＜Ｔ＊＞（Ｃ＊）を有する。ここで、構文要素＜Ｔ＊＞はクエリのヘッドを表し、構文要素（Ｃ＊）はクエリのボディを表す。言語４００で書かれた各クエリは、ヘッドとボディを有する。ヘッドは、パラメータの数とそれらの個々の型を宣言する。ボディは、１組のバインディングを収容する。クエリが、通常は単一のタスクを実行する、関連定数、データ型、変数を備えたステートメントの名前付きシーケンスである（ただし、名前なしクエリは言語４００を用いて表現できるが）という点において、このクエリは従来のプログラミングプロシージャにたとえることができる。例えば、クエリのヘッドは、プロシージャのシグニチャと同様であるのに対し、クエリのボディは、プロシージャの内部に収容されたステートメントのシーケンスと同様である。ヘッドのデリミッタ＜＞の内部には、ゼロ以上のクエリ項（以下に定義）を表す記号Ｔ＊が収容される。ボディのデリミッタ（）の内部には、ゼロ以上の制約（以下に定義）を表す記号Ｃ＊が収容される。
【０１００】
決定ブロック１１１６でテストに対する答えがＮＯの場合、これは、クエリＱが、言語４００によって認識される構文形式で書かれていないことを意味し、方法１１００は実行を終え、終了する。答えがＹＥＳであるならば、方法１１００は、別の決定ブロック１１１８に進み、そこで、プロセスカーネル３０２Ｃは、クエリのボディの中の各制約Ｃが構文形式Ｔ：＝：Ｔを有するかどうかを判断する。ここで、上記し、以下にさらに説明するＴはクエリ項であり、記号：＝：は２つのクエリ項の関係を定義するバインディングを表す。答えがＮＯの場合、これは、クエリのボディの１つの制約が言語４００にとって受け入れ可能な形式で書かれていないことを意味し、方法１１００は実行を終え、終了する。そうではなく、決定ブロック１１１８での答えがＹＥＳであるならば、方法は別の決定ブロック１１２０に進む。
【０１０１】
決定ブロック１１２０で、プロセスカーネル３０２Ｃは、クエリ項Ｔがリテラル（以下、「ＴＯＰ」）かどうかを判断する。リテラルは、変数や表現式の結果としてではなくそれ自体として表現されるプログラムにおいて使用される値である。リテラルの例としては、数２５および３２．１、文字ａ、文字列「Ｈｅｌｌｏ」、ブール値ＴＲＵＥが挙げられる。決定ブロック１１２０での答えがＹＥＳの場合、方法１１００は別の継続端子（「端子Ａ５」）に進む。端子Ａ５から、方法１１００は決定ブロック１１４６に進み、そこで、プロセスカーネル３０２Ｃは、分析すべき別の表現式があるかどうかを判断する。答えがＮＯの場合、方法１１００は別の継続端子（「端子Ｂ」）に進む。そうではなく、決定ブロック１１４６での答えがＹＥＳであるならば、方法１１００はブロック１１１４にループバックして、分析のためにプログラム３０２Ａから別のクエリ表現式を取得する。
【０１０２】
決定ブロック１１２０で答えがＮＯの場合、方法１１００は別の決定ブロック１１２２に進み、そこで、プロセスカーネル３０２Ｃは、クエリ項Ｔが相補リテラル（以下、「ｂｏｔｔｏｍ」）であるかどうかを判断する。相補リテラルは、リテラルのインバージョンである。決定ブロック１１２２における答えがＹＥＳの場合、方法１１００は端子Ａ５（上記の）に進む。代わりに、決定ブロック１１２２における答えがＮＯであるならば、方法１１００は別の決定ブロック１１２４に進む。ここでは、プロセスカーネル３０２Ｃが、クエリ項Ｔがディスカーダ（記号「＿」で区切られる）かどうかを判断する。ディスカーダは、入力パラメータのみを取り込み、出力パラメータを何ら提供しないクエリである。決定ブロック１１２４における答えがＹＥＳの場合、方法１１００は上記の端子Ａ５に進む。決定ブロック１１２４で、答えがＮＯの場合、方法１１００は別の継続端子（「端子Ａ１」）に進む。
【０１０３】
端子Ａ１（図１１Ｄ）から、答えがＮＯの場合には、方法１１００は決定ブロック１１２６に進み、そこで、プロセスカーネル３０２Ｃは、クエリ項Ｔが名前（または「Ｈｅｌｌｏ」などのリテラル文字列）かどうかを検証する。好ましくは、アルファベット文字は、言語４００によって構文的に変数として扱われ、プログラム実行の間に修正することができるデータを収容することが可能な名前付き記憶ロケーションである。言語４００では、あるアルファベット文字が「名前」によって先行される場合、そのアルファベット文字は言語４００によって変数の代わりにリテラル文字列として扱われる。決定ブロック１１２６における答えがＹＥＳの場合、方法１１００は端子Ａ５（上記の）に進む。決定ブロック１１２６において答えがＮＯであるならば、方法１１００は別の決定ブロック１１２８に進み、そこで、プロセスカーネル３０２Ｃはクエリ項Ｔが変数（Ｘなど）であるかどうかを判断する。答えがＹＥＳの場合、方法１１００は端子Ａ５（上記の）に進む。
【０１０４】
決定ブロック１１２８において答えがＮＯの場合は、方法は決定ブロック１１５９に進み、そこで、プロセスカーネル３０２Ｃは、クエリ項Ｔが、形式「Ｘ＾」を有する局所変数であるかどうかを判断する。形式Χ＾は、項Ｘを収容し、言語４００で書かれたプログラム中の変数を示す。通常、マイクロコンピュータのキーボードの最上段列の６のキーの上にある小さ上向き記号（＾）であるカレットは、変数Ｘが局所変数（コンピュータ科学の用語法では、局所変数とは、コードの所与のブロック、通常はサブルーチンに範囲が限定される変数を意味するが、本発明では、局所変数の範囲はプロセスに限定される）であることを表す。また、項Χ＾は、継続プロセスにおいて消費されるべき情報をエクスポートすることが可能な局所変数Ｘの、プロセスにおける、作成を表す。決定ブロック１１５９において答えがＹＥＳの場合、方法１１００は端子Ａ５（上記の）に進む。
【０１０５】
決定ブロック１１５９で、答えがＮＯであるならば、方法は決定ブロック１１５７に進み、そこで、プロセスカーネル３０２Ｃは、クエリ項Ｔが、形式「＾Ｘ」の局所変数であるかどうかを判断する。形式＾Ｘは、変数を表す項Ｘを収容する。項＾はカレットであり、項＾Ｘは、プロセスにおいて、そのプロセスが展開するコンピューティング環境から（消費されるべき）情報をインポートすることが可能な局所変数Ｘを表す。決定ブロック１１５７において答えがＹＥＳの場合、方法１１００は端子Ａ５（上記の）に進む。そうではなく、決定がＮＯであるならば、方法１１００は別の継続端子（「端子Ａ２」）に進む。
【０１０６】
端子Ａ２から、方法フローは決定ブロック１１３０に進み、そこで、プロセスカーネル３０２Ｃは、クエリ項Ｔをチェックして、それがインバージョン（〜記号によって区切られる）かどうかを調べる。決定がＹＥＳの場合、方法フローは端子Ａ５（上記の）に進む。そうではなく、決定がＮＯであるならば、方法１１００は決定ブロック１１３２に入る。決定ブロック１１３２で、プロセスカーネル３０２Ｃは、クエリ項Ｔが１組の順序付けられた要素であるタプルであるかどうかを判断する。言語４００には、タプルを意味する２つの記号がある。すなわち、構文記号「★」と構文記号「＃」である。ブロック１１３２における答えがＹＥＳの場合、方法フローは端子Ａ５（上記の）に進む。そうではなく、決定がＮＯであるならば、方法１１００は決定ブロック１１３４に進む。ここでは、プロセスカーネル３０２Ｃが、クエリ端子Ｔが＜Ｘ＊＞（Ｑ，Ｑ）形式であるかどうかを調べる。この場合、Ｘ＊は１つまたは複数の変数を表し、Ｑはクエリを表す。このように、プロセス表現式＜Ｘ＊＞（Ｑ，Ｑ）は、そのクエリのヘッドの中のゼロ以上の変数、およびカンマで区切られたクエリのボディの中の他の２つのクエリを表す。決定ブロック１１３４において決定がＹＥＳの場合、方法フローは端子Ａ５（上記の）に進む。決定がＮＯであるならば、方法１１００は決定ブロック１１３６に進む。ここでは、プロセスカーネル３０２Ｃは、クエリ項Ｔが左挿入（ＩＮＲ（Ｘ））であるかどうかをチェックする。従来は、左側挿入演算子「ｉｎｌ（）」を用いて、２つの集合の和集合の中のある要素のソースを示す。例えば、集合Ａが集合Ｂと和算されると仮定する（これをＡ＋Ｂで表す）。集合Ａ＋Ｂの各要素は、実際には、ラベルｉｎｌでタグ付けして、その要素が集合Ａに由来していることを表す（視覚的に、アルファベット文字Ａは集合Ａ＋Ｂの左側にあるため）。本発明では、好ましくは、コンストラクタｉｎｌを用いて、クエリ表現式＜Χ＊＞（Ｑ，Ｑ）のボディの左側のＱに関する操作を表す（以下に記載）。決定ブロック１１３６の答えがＹＥＳの場合、方法フローは端子Ａ５（上記の）に進む。そうでない場合は、方法１１００は別の継続端子（「端子Ａ３」）に入る。
【０１０７】
端子Ａ３から、方法１１００は、決定ブロック１１３８に進み、そこで、プロセスカーネル３０２Ｃは、クエリ項Ｔが右挿入（ＩＮＲ（Ｘ））であるかどうかを判断する。上記に簡単に説明したように、形式＜Χ＊＞（ＱＬＱＲ）のクエリがあると、左挿入コンストラクタ（ＩＮＬ（Ｘ））が変数Ｘを制約ＱＬにバインドできるようにし、右挿入コンストラクタ（ＩＮＲ（Ｘ））が変数Ｘを制約ＱＲにバインドできるようにする。決定ブロック１１３８において答えがＹＥＳの場合、方法１１００は端子Ａ５（上記の）に進む。そうでない場合は、方法フローは決定ブロック１１４０に進み、そこで、プロセスカーネル３０２Ｃは、クエリ項Ｔが＜Ｘ＊＞（Ｑ）形式であるかどうかを判断する。方法１１００は、決定ブロック１１４０での答えがＹＥＳの場合、端子Ａ５に進む。そうでない場合は、方法フローによって別の決定ブロック１１４２に入る。ここでは、プロセスカーネル３０２Ｃは、クエリ項Ｔが？Ｔ形式であるかどうかを判断する。決定ブロック１１４２を参照されたい。演算子「？」は、項Ｔを、クエリ＜Χ＊＞（Ｑ）のボディに収容されているクエリＱのヘッドの中の第１の項にバインドする読出し演算子とみなすことができる。決定ブロック１１４２において答えがＹＥＳの場合、方法フローは端子Ａ５（上記の）に進む。答えがＮＯであるならば、方法は、クエリ項Ｔがコピー操作（例えば、「Ｔ＠Ｔ」）であるかどうかを判断する。ブロック１１４０における答えがＹＥＳであるならば、方法１１００によって端子Ａ５に入る（上記に説明）。代わりに、答えがＮＯであるならば、それは、クエリＱが、言語４００によって認識可能な構文形式で書かれていないことを意味し、方法１１００は実行を終え、終了する。
【０１０８】
端子Ｂ（図１１Ａ）から、方法１１００は、継続端子（「端子Ｃ」）と出口端子（「端子Ｄ」）の間で定義される１組の処理ステップ１１０４に進む。この１組の処理ステップ１１０４は、プロセスステートメントの構造および内容を規定する構文規則に対してプログラム３０２Ａを走らせる。端子Ｃ（図１１Ｇ）から、プロセスカーネル３０２Ｃは、プログラム３０２Ａからのプロセス表現式（П）を得る。ブロック１１４８を参照されたい。次に、決定ブロック１１５０で、プロセスカーネル３０２Ｃは、プロセス表現式Пが、プロセスの停止またはプロセスの非アクティブを表す「０」であるかどうかを判断する。答えがＹＥＳの場合、方法フローは別の継続端子（「端子Ｃ３」）に進む。そうでない場合は、方法フローは別の決定ブロック１１５２に進む。プロセスカーネル３０２Ｃは、プロセス表現式ПがＸ［Ｑ］．Ｐ形式であるかどうかを決定し、ここで、Ｘは、チャネル、キュー、データベース、またはその他の構造化ストアを表す変数であり、Ｑは、上記に説明し図１１Ｃ〜１１Ｆに示した構文を有するクエリであり、Ｘ［Ｑ］は、クエリＱがＸにサブミットまたはデポジットされることを表し、ピリオド「．」は、プロセスＸ［Ｑ］から別のプロセスＰへのシーケンスを表し、またはプロセスＸ［Ｑ］の一部から同じプロセスの別の一部Ｐへのシーケンスを表す。決定ブロック１１５２における答えがＹＥＳの場合、方法１１００は端子Ｃ３に進む。そうではなく、答えがＮＯであるならば、方法１１００は決定ブロック１１５４に進む。プロセスカーネル３０２Ｃは、プロセス表現式Пが、Ｘ［Ｑ０］．Ρ０＋Ｘ［Ｑ１］．Ρ１など、いくつかのΧ［Ｑｉ］．Ρｉの和算であるかどうかを判断する。この和算は、プロセス表現式Пで表されるプロセスが、多くの選択肢のうちの１つを実行することができることを表す。例えば、Ｘ［Ｑ０］．Ρ０＋Ｘ［Ｑ１］．Ρ１の和算によって、Пで表されるプロセスは、Ｘ［Ｑ０］．Ρ０またはＸ［Ｑ１］．Ρ１のいずれかを実行することができる。決定ブロック１１５４における答えがＹＥＳの場合、方法１１００は端子Ｃ３に進む。そうではなく、答えがＮＯであるならば、方法フローは別の継続端子「（端子Ｃ１）」に進む。
【０１０９】
端子Ｃ１（図１１Ｈ）から、方法１１００は、決定ブロック１１５６に進み、そこでプロセスカーネル３０２Ｃは、プロセス表現式Пが（ＮＥＷ  Ｘ）Ρ形式であるかどうかを判断する。この場合、ＮＥＷは、あるプロセスにバインドされる新しい名前を作成するための言語４００の演算子を表し、（ＮＥＷ  Χ）は、あるプロセスの中に新しい名前Ｘの作成を表し、（ＮＥＷ  Ｘ）Ｐは、新しい変数Ｘが作成され、プロセスＰにバインドされることを表す。決定ブロック１１５６における決定がＹＥＳの場合、方法１１００は端子Ｃ３で継続する。答えがＮＯであるならば、方法１１００によって決定ブロック１１５８に入る。ここでは、プロセスカーネル３０２Ｃは、プロセス表現式ПがＰ｜Ｐ形式であるかどうかを判断する。この形式は、プロセスが別のプロセスと並列に実行されることを表す。決定ブロック１１５８における答えがＹＥＳの場合、方法フローは端子Ｃ３に進む。そうでない場合は、方法１１００は決定ブロック１１６０に進む。プロセスカーネル３０２Ｃは、決定ブロック１１６０で、プロセス表現式Пが！Ｐ形式であるかどうかを判断する。この場合、エクスクラメーションマーク「！」はレプリケーション演算子を表し、！Ｐは無限の構成、Ｐ｜Ｐ｜．．．．を表す。レプリケーション演算子！によって、開発者は、言語４００を用いてプロセスの無限挙動を表現することができる。決定ブロック１１６０において決定がＹＥＳの場合、方法１１００は端子Ｃ３に進む。そうでない場合は、方法１１００は別の継続端子（「端子Ｃ２」）に入る。
【０１１０】
端子Ｃ２（図１１Ｉ）から、方法１１００は決定ブロック１１６２に進み、そこで、プロセスカーネル３０２Ｃは、プロセス表現式ПがΧ［Ｐ］形式であるかどうかを判断する。構文形式Χ［Ｐ］は、開発者が、言語４００を用いて、前述のように、構造化ストアの中でも特にチャネル、キュー、およびデータベースを含むＸに、プロセスＰをデポジットまたはサブミットすることができることを表す。決定ブロック１１６２における答えがＹＥＳの場合、方法１１００は端子Ｃ３に進む。そうではなく、答えがＮＯであるならば、方法は決定ブロック１１６４に進む。プロセスカーネル３０２Ｃは、プロセス表現式Пが、リフトされたクエリ（以下にさらに詳細に説明）である＜Ｑ＞形式かどうかを判断する。決定ブロック１１６４において決定がＹＥＳの場合、方法１１００によって端子Ｃ３に入る。そうではなく、答えがＮＯであるならば、方法１１００は実行を終え、終了する。この時点で方法１１００が終了する理由は、プロセス表現式Пが、言語４００の文法とは矛盾する形で形成されているためである。
【０１１１】
端子Ｃ３（図１１Ｉ）から、方法１１００は決定ブロック１１６６に進み、そこで、プロセスカーネル３０２Ｃは、プログラム３０２Ａがチェックされるべきその他のプロセス表現式を収容しているかどうかを判断する。答えがＮＯの場合、方法フローは別の継続端子（「端子Ｄ」）に進む。そうではなく、答えがＹＥＳであるならば、方法１１００は別の継続端子（「端子Ｃ４」）に進み、これによって、ブロック１１４８にループバックし、上述の方法ステップが繰り返される。
【０１１２】
端子Ｄ（図１１Ａ）から、方法１１００は、１群の処理ステップ１１０６に進み、そこで、クエリ表現式の構造的同等性を規定する１組の等式法則を用いてプログラムを走らせる（図１１Ｊ参照）。処理ステップ１１０６は、継続端子（「端子Ｅ」）と出口端子（「端子Ｆ」）の間で定義される。
【０１１３】
端子Ｅ（図１１Ｊ）から、方法１１００はブロック１１６８に進み、そこでプロセスカーネル３０２Ｃは、構造的同等性の比較を目的とする２つ以上のクエリ表現式を得る。次に、方法は、クエリコンテキスト（Ｋ）がＫ［Ｔ：＝：Ｕ］形式であるかどうかを判断する。クエリコンテキストＫは、１つまたは複数の制約によって埋められるように適応することができる穴を有する複数のクエリを表す。ブロック１１７８における答えがＹＥＳの場合、クエリコンテキストＫは、別のクエリコンテキストＫ［Ｕ：＝：Τ］と構造的に同等である。ブロック１１７０Ｂを参照されたい。次いで、方法フローは別の継続端子（「端子Ｅ１」）に進む。そうではなく、決定ブロック１１７０Ａにおける決定がＮＯであるならば、方法１１００によって別の決定ブロック１１７２Ａに入る。ここで、プロセスカーネル３０２Ｃは、クエリコンテキストＫがΚ［Τ０：＝：Ｕ０，Ｔ１：＝：Ｕ１］形式を有するかどうかを判断する。決定ブロック１１７２Ａの答えがＹＥＳの場合、クエリコンテキストＫは、別のクエリコンテキストΚ［Ｔ１：＝：Ｕ１，Τ０：＝：Ｕ０］と構造的に同等である。ブロック１１７２Ｂを参照されたい。次に、方法フローは端子Ｅ１に進む。代わりに、決定ブロック１１７２Ａにおける答えがＮＯであるならば、方法１１００は端子Ｅ１に進み、そこで、別の決定ブロック１１７４に進む。プロセスカーネル３０２Ｃは、プログラムの中に構造的同等性を分析すべきクエリ表現式がさらにあるかどうかを判断する。ブロック１１７４を参照されたい。答えがＮＯの場合、方法１１００は終了端子Ｆに進む。そうではなく、答えがＹＥＳであるならば、方法１１００はブロック１１６８にループバックし、上述の方法ステップが繰り返される。
【０１１４】
端子Ｆ（図１１Ａ）から、方法１１００は別の継続端子（「端子Ｇ」）に進む。端子Ｇ（図１１Ｂ）から、方法１１００は、継続端子（「端子Ｈ」）と出口端子（「端子Ｉ」）の間で定義される１組の処理ステップ１１０８に進む。これらの処理ステップ１１０８の間で、方法は、処理されたステートメントの構造的同等性を規定する１組の等式法則を用いてプログラムを走らせる。
【０１１５】
端子Ｈ（図１１Ｋ）から、方法１１００はブロック１１７６に進み、そこで、プロセスカーネル３０２Ｃは、構造的同等性の分析のためにプログラム３０２Ａからいくつかのプロセス表現式（П１およびП２）を得る。次に、方法は、プロセス表現式П１がΡ０｜Ｐ１形式であるかどうかを判断する。決定ブロック１１７８Ａを参照されたい。決定がＹＥＳの場合、П２がΡ０｜Ｐ１形式を有するならば、プロセス表現式Π１はプロセス表現式П２と構造的に同等である。ブロック１１７８Ｂを参照されたい。次に、方法１１００は、別の継続端子（「端子Ｈ７」）に進む。決定ブロック１１７８Ａにおいて答えがＮＯの場合、方法１１００は別の決定ブロック１１８０Ａに進み、そこで、プロセスカーネル３０２Ｃは、プロセス表現式П１がＰ｜０形式を有するかどうかを判断する。決定ブロック１１８０Ａにおいて答えがＹＥＳの場合、プロセス表現式П２がＰ形式を有するならば、プロセス表現式П１はプロセス表現式П２と構造的に同等である。ブロック１１８０Ｂを参照されたい。次に、方法フローは端子Ｈ７に進む。決定ブロック１１８０Ａにおいて答えがＮＯの場合、方法１１００は別の決定ブロック１１８２Ａに進む。ここでは、プロセスカーネル３０２Ｃは、プロセス表現式П１が！Ｐ形式であるかどうかを判断する。答えがＮＯの場合、方法１１００は別の継続端子（「端子Ｈ２」）に進む。決定ブロック１１８２Ａにおいて答えがＹＥＳであるならば、方法１１００はさらに別の継続端子（「端子Ｈ１」）に進む。
【０１１６】
端子Ｈ１（図１１Ｌ）から、方法１１００はブロック１１８２Ｂに進み、そこで、プロセス表現式П２がＰ｜！Ｐ形式を有するならば、プロセス表現式П１がプロセス表現式П２と構造的に同等であると判断される。次に、方法１１００は端子Ｈ７に進む。
【０１１７】
端子Ｈ２（図１１Ｌ）から、方法１１００は決定ブロック１１８４Ａに進み、そこで、プロセスカーネル３０２Ｃは、プロセス表現式П１がＰ０＋Ｐ１形式を有するかどうかを判断する。決定ブロック１１８４Ａの答えがＹＥＳの場合、プロセスカーネル３０２Ｃは、プロセス表現式Π２がＰ１＋Ｐ０形式を有するならば、プロセス表現式П１が構造的にプロセス表現式П２と同等であると判断する。ブロック１１８４Ｂを参照されたい。次に、方法フローは端子Ｈ７に進む。代わりに、決定ブロック１１８４Ａにおける答えがＮＯであるならば、方法１１００は別の決定ブロック１１８６Ａに進む。ここでは、プロセスカーネル３０２Ｃは、プロセス表現式Π１がΡ０＋０形式を有するかどうかを判断する。答えがＹＥＳの場合、方法１１００はブロック１１８６Ｂに進み、そこで、プロセスカーネル３０２Ｃは、プロセス表現式Π２がＰ形式を有するならば、プロセス表現式П１が構造的にプロセス表現式П２と同等であると判断する。次に、方法１１００は端子Ｈ７に進む。答えがＮＯであるならば、方法フローは別の決定ブロック１１８８Ａに進む。ここでは、プロセスカーネル３０２Ｃは、プロセス表現式П１が（ＮＥＷ  Ｘ）（ＮＥＷ  Ｙ）Ρ形式を有するかどうかを判断する。答えがＹＥＳの場合、方法１１００は別の継続端子（「端子Ｈ３」）に進む。そうではなく、答えがＮＯの場合は、方法１１００は別の継続端子（「端子Ｈ４」）に進む。
【０１１８】
端子Ｈ３（図１１Ｍ）から、方法１１００は、ブロック１１８８Ｂに進み、そこで、プロセス表現式Π２が（ＮＥＷ  Ｙ）（ＮＥＷ  Ｘ）Ρ形式を有するならば、プロセス表現式П１は構造的にプロセス表現式П２と同等であると判断される。端子Ｈ４（図１１Ｍ）から、方法１１００は別のブロック１１９０Ａに進み、そこで、プロセスカーネル３０２Ｃは、プロセス表現式П１が（ＮＥＷ  Ｘ）（ＮＥＷ  Ｙ）Ρ形式を有するかどうかを判断する。決定ブロック１１９０Ａの答えがＹＥＳの場合、プロセス表現式Π２式が（ＮＥＷ  Ｘ）Ρ形式を有するならば、プロセス表現式П１は構造的にプロセス表現式П２と同等である。ブロック１１９０Ｂを参照されたい。次に、方法１１００は端子Ｈ７に進む。決定ブロック１１９０Ａにおける答えがＮＯであるならば、方法１１００は別の決定ブロック１１９２Ａに進む。ここでは、プロセスカーネル３０２Ｃは、プロセス表現式П１が（ＮＥＷ  Ｘ）Ρ｜Ｑ形式を有するかどうかを判断する。決定ブロック１１９２Ａにおいて答えがＹＥＳの場合、プロセスはブロック１１９２Ｂに進み、そこで、プロセスカーネル３０２Ｃは、プロセス表現式П２が（ＮＥＷ  Ｘ）（Ｐ｜Ｑ）形式を有するならば、プロセス表現式П１が構造的にプロセス表現式П２と同等であると判断する。名前Ｘは、好ましくはプロセスＱ中の自由な名前である。言い換えれば、名前ＸはプロセスＱにバインドされない。次に、方法１１００は端子Ｈ７に進む。
【０１１９】
決定ブロック１１９２Ａにおける答えがＮＯであるならば、方法１１００は決定ブロック１１９４Ａに入る。ここで、プロセスカーネル３０２Ｃは、プロセス表現式П１が
【０１２０】
【数１４】
2005525640.tif 000016
【０１２１】
形式を有するかどうかを判断する。この場合、＜＞は何も入っていないクエリのヘッドを表し、
【０１２２】
【数１５】
2005525640.tif 000017
【０１２３】
は制約のリストまたは１組のバインディングを表し、ＮＡＭＥ  Ｘ：＝：ＮＡＭＥ  Ｘ’は、リテラルＸがリテラルＸ’にバインドされていること、またはリテラルＸがリテラルＸ’と同等の関係を有していることを表し、
【０１２４】
【数１６】
2005525640.tif 000018
【０１２５】
は、クエリ
【０１２６】
【数１７】
2005525640.tif 000019
【０１２７】
のヘッドが、プロセスＰと並列に稼働しているクエリであることを表す。決定ブロック１１９４におけるテストの答えがＮＯの場合、方法１１００は端子Ｈ７に進む。代わりに決定ブロック１１９４Ａにおける答えがＹＥＳであるならば、方法１１００は別の継続端子（「端子Ｈ６」）に進む。
【０１２８】
端子Ｈ５（図１１Ｎ）から、方法１１００は別の決定ブロック１１９４Ｂに進む。決定ブロック１１９４Ｂで、プロセスカーネル３０２Ｃは、クエリ
【０１２９】
【数１８】
2005525640.tif 000020
【０１３０】
がカノニカルであるかどうかを判断する。クエリは、その制約（クエリのボディ中のバインディング）がすべて既約（ｉｒｒｅｄｕｃｉｂｌｅ）であり、そのクエリが失敗ではない場合にのみ、カノニカルと考えられるか、またはカノニカル形式である。制約は、クエリにおいて、そのクエリが第２のクエリにマップまたは簡約されるような第２のクエリが存在し、その制約がその第２のクエリの要素である場合にのみ既約である。クエリは、そのクエリが別のクエリにマップまたは簡約され、その別のクエリが失敗を含む場合にのみ、失敗すると考えられる。Ｌ０、Ｌ１がリテラルであり、Ｌ０がＬ１の相補と同等でなければ、形式Ｌ０：＝：Ｌ１の制約は失敗である。
【０１３１】
決定ブロック１１９４Ｂにおける答えがＹＥＳの場合、方法１１００は決定ブロック１１９４Ｃに進む。ここでは、プロセスカーネル３０２Ｃは、プロセス表現式П２が
【０１３２】
【数１９】
2005525640.tif 000021
【０１３３】
形式を有するならば、プロセス表現式П１は構造的にプロセス表現式П２と同等であると判断する。プロセス表現式Ｐ｛Ｘ’／Ｘ｝は、プロセスＰにおいて名前Ｘの発生があったときにはいつもその発生を名前Ｘ’で置き換えることができることを表す。この点に関して、処理ステップ１１９４Ａ〜１１９４Ｃが、代入同等性をプログラム的に記述していることを思い出されたい。これについては、図７Ａ〜７Ｂに関連して先に述べた。次に、方法１１００は端子Ｈ７に進む。
【０１３４】
決定ブロック１１９４Ｂにおける答えがＮＯであるならば、方法１１００は端子Ｈ７に進む。端子Ｈ７から、方法１１００は別の決定ブロック１１９６に進み、そこで、プロセスカーネル３０２Ｃは、構造的同等性の分析にさらなるプロセス表現式があるかどうかを調べる。決定ブロック１１９６において答えがＮＯの場合、方法フローは出口端子Ｉに進む。そうでない場合は、方法１１００は継続端子（「端子Ｈ８」）に進む。端子Ｈ８（図１１Ｋ）から、方法１１００はブロック１１７６にループバックし、上述の方法ステップが繰り返される。
【０１３５】
出口端子Ｉ（図１１Ｂ）から、方法１１００は１組の処理ステップ１１１０に進み、そこで、方法は、プログラム３０２Ａの中のクエリステートメントの意味を規定する操作的意味論規則に対して、プログラム３０２Ａを走らせる。この１組の処理ステップ１１１０は、継続端子（「端子Ｊ」）と出口端子（「端子Ｋ」）の間で定義される。言語４００では、操作的意味論規則は、基本的に、プロセスの展開する一連の関係である。プロセスは、本来、動的であって、ある時点から次の時点まで、そのプロセスが継続的に変化し、または展開する。言語４００の操作的意味論規則は、言語４００で表現されたプロセスの慎重にガイドされた展開を提供する。図１１Ｃ〜１１Ｉにおいて上記に説明した構文規則を通して、開発者は、プロセスが言語４００の操作的意味論を通じて展開するニュアンスを表現することができる。
【０１３６】
端子Ｊ（図１１Ｏ）から、方法１１００はブロック１１９８に進み、そこでプロセスカーネル３０２Ｃは、プログラム中のクエリ表現式からバインディングを得る。次に、決定ブロック１１９９Ａにおいて、プロセスカーネル３０２Ｃは、バインディングＢがバインディングＴＯＰ：＝：ＢＯＴＴＯＭを収容するかどうかを判断する。答えがＹＥＳの場合、プロセスカーネル３０２Ｃは、バインディングＢを無に簡約する。ブロック１１９９Ｂを参照されたい。次に、方法フローは継続端子（「端子Ｊ４」）に進む。代わりに、答えがＮＯであるならば、方法フローは決定ブロック１１９７Ａに進み、そこで、プロセスカーネル３０２Ｃは、バインディングＢがバインディングＸ：＝：Τ，Ｕ：＝：Ｘを収容するかどうかを判断する。答えがＹＥＳの場合、プロセスカーネル３０２Ｃは、バインディングＢをバインディングＴ：＝：Ｕに簡約する。ブロック１１９７Ｂを参照されたい。次に、方法フローは端子Ｊ４に進む。答えがＮＯであるならば、方法１１００は別の継続端子（「端子Ｊ１」）に進む。
【０１３７】
端子Ｊ１（図１１Ｐ）から、方法１１００は別の決定ブロック１１９３Ａに進み、そこで、プロセスカーネル３０２Ｃは、バインディングＢがＴ０★Ｔ１：＝：Ｕ０＃Ｕ１を収容するかどうかを判断する。答えがＹＥＳの場合、プロセスカーネル３０２Ｃは、バインディングＢをＴ０：＝：Ｕ０，Τ１：＝：Ｕ１に簡約する。ブロック１１９３Ｂを参照されたい。次に、方法フローは端子Ｊ４に進む。決定ブロック１１９３Ａにおいて答えがＮＯであるならば、方法１１００は別の決定ブロック１１９１Ａに進む。プロセスカーネル３０２Ｃは、バインディングＢがバインディング
【０１３８】
【数２０】
2005525640.tif 000022
【０１３９】
を収容するかどうかを判断する。決定ブロック１１９１Ａにおける答えがＹＥＳの場合、プロセスカーネル３０２ＣはバインディングＢを
【０１４０】
【数２１】
2005525640.tif 000023
【０１４１】
に簡約する。ブロック１１９１Ｂを参照されたい。次に、方法１１００は端子Ｊ４に進む。決定ブロック１１９１Ａの答えがＮＯであるならば、方法１１００は別の決定ブロック１１８９Ａに進む。
【０１４２】
決定ブロック１１９１Ａにおいて答えがＮＯであるならば、方法１１００は別の決定ブロック１１８９Ａに進む。プロセスカーネル３０２Ｃは、バインディングＢが
【０１４３】
【数２２】
2005525640.tif 000024
【０１４４】
を収容するかどうかを判断する。決定ブロック１１８９Ａにおいて答えがＹＥＳの場合、方法１１００はブロック１１８９Ｂに進み、そこでプロセスカーネル３０２Ｃは、バインディングＢを
【０１４５】
【数２３】
2005525640.tif 000025
【０１４６】
に簡約する。次に、方法フローは端子Ｊ４に進む。決定ブロック１１８９Ａにおける答えがＮＯであるならば、方法１１００は別の継続端子（（「端子Ｊ２」）に進む。
【０１４７】
端子Ｊ２から、方法１１００は別の決定ブロック１１８７Ａに進む。ここでは、プロセスカーネル３０２Ｃは、バインディングＢが
【０１４８】
【数２４】
2005525640.tif 000026
【０１４９】
を収容するかどうかを判断する。答えがＹＥＳの場合、プロセスカーネル３０２ＣはバインディングＢを
【０１５０】
【数２５】
2005525640.tif 000027
【０１５１】
に簡約する。ブロック１１８７Ｂを参照されたい。次に、方法１１００は端子Ｊ４に進む。決定ブロック１１８７Ａにおける答えがＮＯであるならば、方法１１００は別の決定ブロック１１８５Ａに進む。プロセスカーネル３０２Ｃは、バインディングＢが
【０１５２】
【数２６】
2005525640.tif 000028
【０１５３】
を収容するかどうかを判断する。決定ブロック１１８５Ａにおける答えがＹＥＳの場合、プロセスカーネル３０２Ｃは、バインディングＢを
【０１５４】
【数２７】
2005525640.tif 000029
【０１５５】
に簡約する。ブロック１１８５Ｂを参照されたい。次に、方法１１００は端子Ｊ４に進む。決定ブロック１１８５Ａにおける答えがＮＯであるならば、方法１１００は別の決定ブロック１１８３Ａに進む。プロセスカーネル３０２Ｃは、バインディングＢが
【０１５６】
【数２８】
2005525640.tif 000030
【０１５７】
を収容するかどうかを判断する。言い換えれば、クエリ
【０１５８】
【数２９】
2005525640.tif 000031
【０１５９】
はディスカーダ演算子にバインドされる。決定ブロック１１８３Ａにおいて答えがＹＥＳの場合、プロセスカーネル３０２Ｃは、バインディングＢを次のバインディング、すなわち
【０１６０】
【数３０】
2005525640.tif 000032
【０１６１】
に簡約する。言い換えれば、クエリ
【０１６２】
【数３１】
2005525640.tif 000033
【０１６３】
のヘッドの中のリスト
【０１６４】
【数３２】
2005525640.tif 000034
【０１６５】
の各項は、ディスカーダ演算子にバインドされる。次に、方法１１００は端子Ｊ４に進む。決定ブロック１１８３Ａにおいて答えがＮＯであるならば、方法フローによって別の継続端子（「端子Ｊ３」）に入る。
【０１６６】
端子Ｊ３（図１１Ｒ）から、方法１１００は別の決定ブロック１１８１Ａに進み、そこで、プロセスカーネル３０２Ｃは、バインディングＢが
【０１６７】
【数３３】
2005525640.tif 000035
【０１６８】
形式を有するかどうかを判断する。言い換えれば、プロセスカーネル３０２Ｃは、バインディングＢが、ヘッドにリスト
【０１６９】
【数３４】
2005525640.tif 000036
【０１７０】
を、ボディに
【０１７１】
【数３５】
2005525640.tif 000037
【０１７２】
を含む３つの制約リストを持つクエリの形式であるかどうかを判断する。決定ブロック１１８１Ａにおける答えがＹＥＳの場合、プロセスカーネル３０２Ｃは、さらに、リスト
【０１７３】
【数３６】
2005525640.tif 000038
【０１７４】
が
【０１７５】
【数３７】
2005525640.tif 000039
【０１７６】
に簡約できるかどうかを判断する。決定ブロック１１８１Ｂを参照されたい。決定ブロック１１８１Ｂの答えがＹＥＳの場合、バインディングＢはクエリ
【０１７７】
【数３８】
2005525640.tif 000040
【０１７８】
に簡約される。ブロック１１８１Ｃを参照されたい。方法フローは端子Ｊ４に進む。
【０１７９】
決定ブロック１１８１Ａ、１１８１Ｂにおける答えがＮＯであるならば、方法１１００は別の決定ブロック１１７９Ａに進む。プロセスカーネル３０２Ｃは、バインディングＢが次のクエリ、すなわち
【０１８０】
【数３９】
2005525640.tif 000041
【０１８１】
を収容するかどうかを判断する。決定ブロック１１７９Ａにおける答えがＹＥＳの場合、バインディングＢはクエリ
【０１８２】
【数４０】
2005525640.tif 000042
【０１８３】
に簡約される。ブロック１１７９Ｂを参照されたい。言い換えれば、名前Ｕが、クエリのボディの中の名前Ｘにバインドされている場合、名前Ｘがあるリスト
【０１８４】
【数４１】
2005525640.tif 000043
【０１８５】
の中にはどこでもその名前Ｘを名前Ｕと置きかえることができる。次に、方法フローは端子Ｊ４に進む。そうではなく、決定ブロック１１７９Ａにおける答えがＮＯであるならば、方法フローは端子Ｊ４に進み、それによって別の決定ブロック１１７７に進む。ここでは、プロセスカーネル３０２Ｃは、言語４００の意味論規則を適用すべき別のクエリ表現式があるかどうかを判断する。答えがＮＯの場合、方法１１００は出口端子Ｋに進む。決定ブロック１１７７における答えがＹＥＳであるならば、方法１１００は別の継続端子（「端子Ｊ５」）に進む。端子Ｊ５から、方法１１００はブロック１１９８にループバックし、上述の方法ステップが繰り返される。
【０１８６】
出口端子Ｋ（図１１Ｂ）から、方法１１００は１組の処理ステップ１１１２に進み、そこで、方法は、プロセス表現式の意味を管理する操作的意味論規則に対して、プログラム３０２Ａを走らせる。１組の処理ステップ１１１２は、継続端子（「端子Ｌ」）と出口端子（「端子Ｍ」）の間で定義される。
【０１８７】
端子Ｌ（図１１Ｓ）から、方法１１００はブロック１１７５に進み、そこで、プロセスカーネル３０２Ｃは、プログラム３０２Ａの中のプロセス表現式（П）を得る。次に、決定ブロック１１７３Ａにおいて、プロセスカーネル３０２Ｃは、プロセス表現式Пが総和Χ［Ｑ０］．Ｐ０＋．．．＋Χ［Ｑ１］．Ｐ１＋．．．を収容するかどうかを判断する。決定ブロック１１７３Ａにおいて答えがＹＥＳの場合、方法１１００は別の決定ブロック１１７３Ｂに進む。ここでは、プロセスカーネル３０２Ｃは、別のクエリＱにカノニカル的に簡約可能である、形式σ０（Ｑ０）：＝：σ１（Ｑ１）のバインディングがあるかどうかを判断する。σ０、σ１は共に、項をマップまたは簡約する置換を定義する（付録の３．２節の定義３．２．１参照）。σ０、σ１は、共に、好ましくはデータベースの結合として解釈される。ブロック１１７３Ｂにおいて答えがＹＥＳの場合、プロセスカーネル３０２Ｃは、プロセス表現式ПをプロセスΧ［Ｑ］．（Ρ０｜Ｐ１）に簡約する。これは、簡約されたクエリＱが構造化ストアＸにサブミットされ、その後、両プロセスΡ０，Ｐ１が並列に実行することを表す。ブロック１１７３Ｃを参照されたい。処理ステップ１１７３Ａ〜１１７３Ｃは、図９Ａ〜９Ｂに関連して上記に説明している。次に、ブロック１１７３Ｃから、方法１１００は別の継続端子（「端子Ｌ６」）に進む。
【０１８８】
決定ブロック１１７３Ａ、１１７３Ｂにおける答えがＮＯであるならば、方法１１００は別の決定ブロック１１７１Ａに進む。プロセスカーネル３０２Ｃは、プロセス表現式ПがＰ｜Ｐ”を収容するかどうかを判断する。答えがＹＥＳの場合、方法１１００は別の決定ブロック１１７１Ｂに進み、そこで、プロセスカーネル３０２Ｃは、プロセスＰがプロセスＰ’に簡約できるかどうかを判断する。決定ブロック１１７１Ｂにおける答えがＹＥＳの場合、方法１１００は別の継続端子（「端子Ｌ１」）に進む。決定ブロック１１７１Ａ、１１７１Ｂにおける答えがＮＯであるならば、方法１１００は別の継続端子（「端子Ｌ２」）に進む。
【０１８９】
端子Ｌ１（図１１Ｔ）から、方法１１００はブロック１１７１Ｃに進み、そこでプロセスカーネル３０２Ｃは、プロセス表現式ПをＰ｜Ｐ’に簡約する。次に、方法フローは端子Ｌ６に進む。端子Ｌ２（図１１Ｔ）から、方法１１００は別の決定ブロック１１６９Ａに進み、そこで、プロセスカーネル３０２Ｃは、プロセス表現式Пが（ＮＥＷ  Ｘ）Ｐを収容するかどうかを判断する。答えがＹＥＳの場合、方法フローは決定ブロック１１６９Ｂに進み、そこで、プロセスカーネル３０２Ｃは、プロセスＰがＰ’に簡約できるかどうかを判断する。決定ブロック１１６９Ｂにおける答えがＹＥＳの場合、プロセスカーネル３０２Ｃはプロセス表現式Пを（ＮＥＷ  Ｘ）Ｐ’に簡約する。ブロック１１６９Ｃを参照されたい。次に、方法１１００は端子Ｌ６に進む。決定ブロック１１６９Ａ、１１６９Ｂにおける答えがＮＯであるならば、方法フローは別の決定ブロック１１６７Ａに進む。ここでは、プロセスカーネル３０２Ｃは、プロセス表現式ПがＸ［Ｐ］を収容するかどうかを判断する。答えがＹＥＳの場合、方法１１００は別の決定ブロック１１６７Ｂに進む。プロセスカーネル３０２Ｃは、プロセスＰが別のプロセスＰ’に簡約できるかどうかを判断する。決定ブロック１１６７Ｂを参照されたい。決定ブロック１１６７Ｂの答えがＹＥＳの場合、方法フローは別の継続端子（「端子Ｌ３」）に進む。決定ブロック１１６７Ａ、１１６７Ｂにおける答えがＮＯであるならば、方法１１００は別の継続端子（「端子Ｌ４」）に進む。
【０１９０】
端子Ｌ３から、方法１１００はブロック１１６７Ｃに進み、そこで、プロセスカーネル３０２Ｃは、プロセス表現式ПをＸ［Ｐ’］に簡約する。次に、方法フローは端子Ｌ６に進む。端子Ｌ４（図１１Ｕ）から、方法フローは別の決定ブロック１１６５Ａに進み、そこで、プロセスカーネル３０２Ｃは、プロセス表現式ПがプロセスＸ［Ｑ］．Ｐを収容するかどうかを判断する。決定ブロック１１６５Ａにおける答えがＹＥＳの場合、プロセスカーネル３０２Ｃは、決定ブロック１１６５Ｂにおいて、クエリＱが、形式
【０１９１】
【数４２】
2005525640.tif 000044
【０１９２】
の別のクエリと同等の関係を有しているかどうかを判断する。項
【０１９３】
【数４３】
2005525640.tif 000045
【０１９４】
は、そのヘッドに何も有していないクエリ（クエリのヘッドに項が何も含まれていないこと）を意味する。そのボディは、制約またはバインディング関係（ポートをポートにバインドする条件など）のリストを表す項
【０１９５】
【数４４】
2005525640.tif 000046
【０１９６】
、または、局所変数のリストと局所変数のリストに関連付けられた値リストの間のバインディング関係を表す、項
【０１９７】
【数４５】
2005525640.tif 000047
【０１９８】
を収容する。
【０１９９】
決定ブロック１１６５Ｂの答えがＹＥＳの場合、プロセスカーネル３０２Ｃは、さらに、クエリＱがカノニカル形式であるかどうかを判断する。決定ブロック１１６５Ｃを参照されたい。決定ブロック１１６５ＣにおけるテストがＹＥＳの場合、プロセスカーネル３０２Ｃは、プロセス表現式Пを形式
【０２００】
【数４６】
2005525640.tif 000048
【０２０１】
のプロセスに簡約する。ブロック１１６５Ｄを参照されたい。項＜Ｑ’＞は、
【０２０２】
【数４７】
2005525640.tif 000049
【０２０３】
と同等のリフトされたクエリであり、これについては図１０Ａ〜１０Ｃにおいてすでに説明した。リフトされたクエリ
【０２０４】
【数４８】
2005525640.tif 000050
【０２０５】
は、ヘッドに項をまったく収容しないクエリであり、そのボディにはバインディング関係が収容されている。バインディング関係は、グローバルに知られている制約
【０２０６】
【数４９】
2005525640.tif 000051
【０２０７】
のリストの中に記載される。項
【０２０８】
【数５０】
2005525640.tif 000052
【０２０９】
は、制約
【０２１０】
【数５１】
2005525640.tif 000053
【０２１１】
のリスト中の制約項がリストされている時間の間、局所変数
【０２１２】
【数５２】
2005525640.tif 000054
【０２１３】
のリスト中の各局所変数を、値
【０２１４】
【数５３】
2005525640.tif 000055
【０２１５】
のリスト中の対応する値と置き換えるプロセスである。つまり、プロセスＸ［Ｑ］．Ｐの中のクエリＱが
【０２１６】
【数５４】
2005525640.tif 000056
【０２１７】
と同等であり、さらに、クエリＱがカノニカル形式であるならば、プロセスＸ［Ｑ］．Ρは形式
【０２１８】
【数５５】
2005525640.tif 000057
【０２１９】
のプロセスに展開することができる。次に、方法１１００は端子Ｌ６に進む。
【０２２０】
決定ブロック１１６５Ａ〜１１６５Ｃにおける答えがＮＯであるならば、方法１１００によって別の決定ブロック１１６３Ａに入る。プロセスカーネル３０２Ｃは、プロセス表現式ПがＰ０’と同等の関係を有するＰ０を収容するかどうかを判断する。決定ブロック１１６３Ａを参照されたい。答えがＹＥＳの場合、方法１１００は、別の継続端子（「端子Ｌ５」）に進む。決定ブロック１１６３Ａの答えがＮＯであるならば、方法１１００は端子Ｌ６に進む。
【０２２１】
端子Ｌ５（図１１Ｖ）から、方法１１００は決定ブロック１１６３Ｂに進み、そこで、プロセスカーネル３０２Ｃは、Ｐ０’がＰ１’に簡約できるかどうかを判断する。答えがＹＥＳの場合、プロセスカーネル３０２Ｃは、プロセスＰ１’がプロセスＰ１と同等の関係を有するかどうかを判断する。決定ブロック１１６３Ｃを参照されたい。決定ブロック１１６３ＣのテストがＹＥＳの場合、プロセスカーネル３０２ＣはプロセスＰ０をプロセスＰ１に簡約する。ブロック１１６３Ｄを参照されたい。次に、方法１１００は端子Ｌ６に進む。決定ブロック１１６３Ｂ、１１６３Ｃにおける答えがＮＯである場合も、方法１１００は端子Ｌ６に進む。
【０２２２】
端子Ｌ６（図１１Ｖ）から、方法１１００は別の決定ブロック１１６１に進み、そこで、プロセスカーネル３０２Ｃは、言語４００の操作的意味論規則のもとで分析すべきプロセス表現式がさらにあるかどうかを調べる。答えがＮＯの場合、方法フローは出口端子Ｍに進む。決定ブロック１１６１における答えがＹＥＳであるならば、方法１１００は、別の継続端子（「端子Ｌ７」）に進む。端子Ｌ７から、方法１１００はブロック１１７５にループバックし、上述のステップが繰り返される。
【０２２３】
本発明の好ましい実施形態を図示し、説明してきたが、本発明の趣旨および範囲から逸脱することなく、その中で様々な変更が可能であることを理解されるであろう。
【０２２４】
（付録）
意味論
この言語の意味論は、ＳＯＳスタイルの１組の簡約規則で提示される。簡潔には、コンパクトで完全にインフィックスの構文のバージョン、多くの場合、カリキュラスと称される、を導入している。構文はあまりに細かいプロセス間の区別を行うため、構文にわたって１組の同等性の規則が構文に課される。簡約規則は、この同等性にわたって閉じている。
【０２２５】
カリキュラススタイルの構文
【０２２６】
【数５６】
2005525640.tif 000058
【０２２７】
プログラマが見る構文（プログラムレベルの構文）と、インフィックス（モデルレベルの）構文の間の対応は明白であるべきであるが、これを、完全を期して以下の表に記載する。プリフィックス構文が、ブロック形式のような構文糖を提供することによって、その冗長性に対処しようとしていることに注意されたい。この形式によって、プログラマは、継続の前にシーケンス的に実行されるべきいくつかのアクションのプリフィックスを指定することができる。下記の表には、これらの形式をすべて集めたものを書き出すのではなく、単に、それらを推測するための最低限の情報が提供されている。この選択では、左側のコラムが右側のコラムの翻訳になっている。
【０２２８】
【表１】
2005525640.tif 000059
【０２２９】
注意願い：プリフィックス構文では、リフトされたクエリ形式は、現在、ユーザレベルで使用することはできない。しかし、今後のバージョンでは使用できるようになるであろう。
【０２３０】
【数５７】
2005525640.tif 000060
【０２３１】
【表２】
2005525640.tif 000061
【０２３２】
構造的同等性
前述のように、構文は多くの区別を行いすぎる。例えば、「：＝：」のどちら側に項が現われようと違いはない。本明細書では、このような不要な区別を除くために、構造的同等性を導入している。
【０２３３】
クエリについては、クエリコンテキストを使ってこれを行う。クエリコンテキストは、条件を挿入する場所を備えた単なるクエリである。プロセスについては、明示的にこれを行う。
【０２３４】
【数５８】
2005525640.tif 000062
【０２３５】
プロセス代数に精通している読者にとって、これらの等式は予想通りのものであろう。以下に１つの興味ある例を挙げる。クエリがカノニカル形式であって、そのボディにいくつかの条件がある場合、それらの条件は、ポート間の等式、または局所変数およびそれらの値の間の等式である場合であろう。リフトする時、局所変数はそれらの値で代入されて継続する。ポート間の等式がリフトされたクエリ中に存在する場合、それらは、ある種の明示的な代入を実施するプロセスとして働く。
【０２３６】
【数５９】
2005525640.tif 000063
【０２３７】
簡約規則
【０２３８】
【数６０】
2005525640.tif 000064
【０２３９】
説明
ＭＡＴＣＨ
マッチ規則は、実際は規則スキーマである。リテラルおよびそのデュアルが一緒に現われた場合には必ず、それらは消散する。これは、それ以上のチェックが必要とされないので、成功と解釈される。
【０２４０】
ＣＵＴ
識別子は、直感的に、ワイヤと考えることができる。２つの項がワイヤの各端に生じた場合、そのワイヤを除去して、２つの項を直接プラグする。この点では、線形型が、十分に型付けされた項では識別子が正確に２度生じることを確実にするということを言っておく価値がある。
【０２４１】
ＴＥＮＳＯＲ−ＰＡＲ
タプルの提供が、タプルの［ｓｉｃ］要求を満たすと、対応するポジション同士がワイヤされる。
【０２４２】
ＷＩＴΗ−ＰＬＵＳ
メニューの提供（ｗｉｔｈＣｌａｉｍ形式）が選択の要求（ｉｎｊｅｃｔＣｌａｉｍ形式）を満たすと、その選択がなされる。これによって、その選定された選択肢がその要求の制約にワイヤされる。
【０２４３】
ＲＥＡＤ
記録の提供（ｏｆＣｏｕｒｓｅＣｌａｉｍ）が返答の要求（ｗｈｙＮｏｔＣｌａｉｍ）を満たすと、記録上のデータがその要求の制約にワイヤされる。
【０２４４】
ＣＯＰＹ
記録の提供がコピーの要求（ｃｏｎｔｒａｃｔｇＣｌａｉｍ）を満たすと、別個のコピーがその要求の別個の制約にワイヤされる。
【０２４５】
ＤＩＳＣＡＲＤ
記録の提供が記録を廃棄する要求（「＿」）を満たすと、その記録は廃棄される。
【０２４６】
ＣＯＮＴＥＸＴ
ある特定の方法で条件の集まりが展開する場合、それらは、クエリのボディのコンテキストにおいてそのように展開することができる。
【０２４７】
ＣＬＥＡＮＵＰ
ワイヤの一端、すなわち［ｓｉｃ］識別子の１つがクエリのヘッド（の中のある項）に現われ、もう一方がボディに現われた場合には、ボディにおいて識別子がバインドされている項をヘッド中に代入することができる。
【０２４８】
定義３．２．１．σ：ｎ→ｎを置換とし、
【０２４９】
【数６１】
2005525640.tif 000065
【０２５０】
をクエリとする。
【０２５１】
【数６２】
2005525640.tif 000066
【０２５２】
になる。
【０２５３】
定義３．２．２．
【０２５４】
【数６３】
2005525640.tif 000067
【０２５５】
および
【０２５６】
【数６４】
2005525640.tif 000068
【０２５７】
とする。
【０２５８】
【数６５】
2005525640.tif 000069
【０２５９】
になる。
【０２６０】
定義３．２．３．リテラルｌ０、ｌ１に関する形式ｌ０：＝：ｌ１の制約は、ｌ０≠〜ｌ１場合に失敗である。
【０２６１】
定義３．２．４．クエリＱは、Ｑ→＊Ｑ’であり、Ｑ’が失敗を収容する場合にのみ、失敗である。
【０２６２】
定義３．２．５．制約ｃは、∀Ｑ’．Ｑ→＊Ｑ’．ｃ∈Ｑ’である場合にのみ、クエリＱにおいて既約である。
【０２６３】
定義３．２．６．クエリＱは、その制約がすべて既約であり、Ｑが失敗ではない場合にのみ、カノニカル（あるいはカノニカル形式）である。
【０２６４】
【数６６】
2005525640.tif 000070
【０２６５】
ＣＯＭＭ
２つのクエリが、それぞれ、それらのヘッドのあるポジションにおいてマッチする項を有し、対応するｃｕｔクエリが、それ以上は進展できないクエリに展開し、しかし失敗ではない場合、これらのクエリを同じキューに配置した２つのプロセスは通信を行うことになる。それらそれぞれの継続は、両方とも簡約されたクエリの完了を待ち続ける。
【０２６６】
ＰＡＲ
プロセスがそれ自体で進展することができる場合は、別のプロセスと並列の構成でその進展をまだ進めることができる。
【０２６７】
ＮＥＷ
プロセスがそれ自体で進展することができる場合は、そのポートの１つが外界との対話にもはや利用できない場合にその進展をまだ進めることができる。
【０２６８】
ＬＩＦＴ
そのヘッドに項を持たないクエリは、そのボディに何らかのバインディングを有する場合、ポートをポートに、または局所変数を値にバインドする条件を有するのみである。このようなクエリはリフトされることがある。リフトする時、局所変数は、継続のボディの外に代入される。
【０２６９】
局所変数が代入でなくなった後、残っている等式はポート間にある。このようなクエリは、次いで、ある種の明示的な置換、または同等のポート間のワイヤとして働くプロセスになる。
【０２７０】
ＥＱＵＩＶ
展開は、この同等性の関係にわたって閉じている。
【図面の簡単な説明】
【０２７１】
【図１】２つのウェブサービス間のリンク上で、ＡＰＩなどの名前を渡すためのπカリキュラスを使用している従来の並行システムを示すブロック図である。
【図２】例示的なコンピューティングデバイスを示すブロック図である。
【図３Ａ】複数のプロセス間で構造化メッセージを通信するための本発明に従って形成された例示的な並行分散システムを示すブロック図である。
【図３Ｂ】複数のプロセス間で構造化メッセージを通信するための本発明に従って形成された例示的な並行分散システムを示すブロック図である。
【図３Ｃ】複数のプロセス間で構造化メッセージを通信するための本発明に従って形成された例示的な並行分散システムを示すブロック図である。
【図４】最終的にコンピューティング資源の並行分散ネットワークにおいて前記例示的なコンピューティングデバイスによって処理し、実行することができる、一連の命令を定義するために使用できる人工的な言語である、例示的なプログラミング言語の主な構文カテゴリを示すブロック図である。
【図５】２つのプロセス間で通信するためのメッセージとしてプロセスを格納するための本発明に従って形成された例示的なキューをより詳細に示すブロック図である。
【図６Ａ】本発明に従って形成された２つのプログラム的なドキュメント間の構造的同等性を判断するための技術を示すブロック図である。
【図６Ｂ】本発明に従って形成された２つのプログラム的なドキュメント間の構造的同等性を判断するための技術を示すブロック図である。
【図７Ａ】本発明に従って形成された並行分散システムにおける２つのプロセス間の通信を向上させるために２つのキューを融合するための技術を示すブロック図である。
【図７Ｂ】本発明に従って形成された並行分散システムにおける２つのプロセス間の通信を向上させるために２つのキューを融合するための技術を示すブロック図である。
【図８】本発明に従って形成された並行分散システムにおけるプロセス間の通信を向上させるために２つのキューを融合するための本発明に従って形成された例示的なシステムを示すブロック図である。
【図９Ａ】本発明に従って形成された並行分散システムにおいて２つの別個のプロセスが通信できるようにする２つのデータベース形式を簡約するための例示的なシステムを示すブロック図である。
【図９Ｂ】本発明に従って形成された並行分散システムにおいて２つの別個のプロセスが通信できるようにする２つのデータベース形式を簡約するための例示的なシステムを示すブロック図である。
【図１０Ａ】本発明に従って形成された並行分散システムにおいてプロセスによって複数のデータベースにアクセスするために使用することができる名前を発見するための本発明に従って形成された例示的なシステムを示すブロック図である。
【図１０Ｂ】本発明に従って形成された並行分散システムにおいてプロセスによって複数のデータベースにアクセスするために使用することができる名前を発見するための本発明に従って形成された例示的なシステムを示すブロック図である。
【図１０Ｃ】本発明に従って形成された並行分散システムにおいてプロセスによって複数のデータベースにアクセスするために使用することができる名前を発見するための本発明に従って形成された例示的なシステムを示すブロック図である。
【図１１Ａ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｂ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｃ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｄ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｅ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｆ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｇ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｈ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｉ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｊ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｋ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｌ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｍ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｎ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｏ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｐ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｑ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｒ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｓ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｔ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｕ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１１Ｖ】コンパイラによってプログラムをコンパイルするか、またはプロセスカーネルによってプロセスを実行するための本発明に従って形成された例示的な方法を示す方法図である。
【図１】
2005525640.tif 000071
【図２】
2005525640.tif 000072
【図３Ａ】
2005525640.tif 000073
【図３Ｂ】
2005525640.tif 000074
【図３Ｃ】
2005525640.tif 000075
【図４】
2005525640.tif 000076
【図５】
2005525640.tif 000077
【図６Ａ】
2005525640.tif 000078
【図６Ｂ】
2005525640.tif 000079
【図７Ａ】
2005525640.tif 000080
【図７Ｂ】
2005525640.tif 000081
【図８】
2005525640.tif 000082
【図９Ａ】
2005525640.tif 000083
【図９Ｂ】
2005525640.tif 000084
【図１０Ａ】
2005525640.tif 000085
【図１０Ｂ】
2005525640.tif 000086
【図１０Ｃ】
2005525640.tif 000087
【図１１Ａ】
2005525640.tif 000088
【図１１Ｂ】
2005525640.tif 000089
【図１１Ｃ】
2005525640.tif 000090
【図１１Ｄ】
2005525640.tif 000091
【図１１Ｅ】
2005525640.tif 000092
【図１１Ｆ】
2005525640.tif 000093
【図１１Ｇ】
2005525640.tif 000094
【図１１Ｈ】
2005525640.tif 000095
【図１１Ｉ】
2005525640.tif 000096
【図１１Ｊ】
2005525640.tif 000097
【図１１Ｋ】
2005525640.tif 000098
【図１１Ｌ】
2005525640.tif 000099
【図１１Ｍ】
2005525640.tif 000100
【図１１Ｎ】
2005525640.tif 000101
【図１１Ｏ】
2005525640.tif 000102
【図１１Ｐ】
2005525640.tif 000103
【図１１Ｑ】
2005525640.tif 000104
【図１１Ｒ】
2005525640.tif 000105
【図１１Ｓ】
2005525640.tif 000106
【図１１Ｔ】
2005525640.tif 000107
【図１１Ｕ】
2005525640.tif 000108
【図１１Ｖ】
2005525640.tif 000109
【国際調査報告】
2005525640.tif 000110