(57)【要約】  本願明細書に記載の技術は、コンピュータプログラムの実行において利用される演算回路をシリアル化し（serialise）及びシリアル化解除する（de-serialise）ために利用されてよい。演算回路は、クライアント及び証明者のための暗号法ルーチンのセットにコンパイルされる２次算術問題（Quadratic  Arithmetic  Problem  (QAP)）を構築するために利用されてよい。クライアント及び証明者は、プロトコルを利用して、証明者がプログラムを正しく実行することをクライアントが効率的に検証できる方法で、プログラムの実行を証明者に委任してよい。演算回路は、コードセットを含むシリアル化回路を生成するために圧縮されるシンボルセット（例えば、算術ゲート及び値）を含む。ここで、シンボルセットは、無損失方法でコードセットから導出可能である。シリアル化及びシリアル化解除技術は、ブロックチェーンネットワークのノードにより利用されてよい。
2021518710.tif 000002
【特許請求の範囲】
【請求項１】
演算回路のデータフットプリントを削減するステップであって、
演算回路に関連するデータフィールドのセットのデータフィールドの第１サブセットを除去するステップであって、前記データフィールドの前記第１サブセットは、前記データフィールドの前記セットの前記データフィールドの第２サブセットから取得可能であり、前記第１サブセット及び前記第２サブセットは独立セットである、ステップと、
前記第２サブセットにエントロピー符号化方式を適用して、圧縮演算回路を生成するステップと、
により前記演算回路のデータフットプリントを削減するステップと、
前記圧縮演算回路を格納させるステップと、
を含むコンピュータにより実施される方法。
【請求項２】
前記データフィールドの前記第１サブセットは、前記演算回路への入力セットの識別子を含み、前記第２サブセットは、前記入力セットの濃度を含む、請求項１に記載のコンピュータにより実施される方法。
【請求項３】
前記データフィールドの前記第１サブセットは、前記演算回路のゲート出力セットの識別子を含む、請求項１又は２に記載のコンピュータにより実施される方法。
【請求項４】
前記第２サブセットは、ゲートセットを含み、前記第１サブセットは、前記ゲートセットの第１ゲートの第１入力を含む、請求項１〜３のいずれか一項に記載のコンピュータにより実施される方法、。
【請求項５】
前記第２サブセットは、ゲートセットを含み、前記第１サブセットは、前記ゲートセットの最後のゲートの最後の出力を含む、請求項１〜４のいずれか一項に記載のコンピュータにより実施される方法、。
【請求項６】
前記第２サブセットに前記エントロピー符号化方式を適用するステップは、
前記第２サブセットからシンボルセットを決定するステップと、
前記シンボルセットの各シンボルに、対応するコードを割り当てるステップと、
を含む、請求項１〜５のいずれか一項に記載のコンピュータにより実施される方法。
【請求項７】
前記シンボルセットのシンボルは、前記第２サブセットの中で少なくとも２回繰り返される、請求項６に記載のコンピュータにより実施される方法。
【請求項８】
コードの長さは、前記コードに対応する前記シンボルの頻度に反比例する、請求項６又は７に記載のコンピュータにより実施される方法。
【請求項９】
前記シンボルに対応する前記コードは、ハフマン符号に従い生成される、請求項６〜８のいずれか一項に記載のコンピュータにより実施される方法。
【請求項１０】
前記方法は、シリアル化回路を生成するステップを更に含み、
前記シリアル化回路は、
前記第２サブセットに前記エントロピー符号化方式を適用するステップに少なくとも部分的に基づく結果と、
ヘッダデータ構造と、
を含み、
前記ヘッダデータ構造は、
バージョン番号と、
合計ワイヤ数と、
を含む、請求項１〜９のいずれか一項に記載のコンピュータにより実施される方法。
【請求項１１】
前記ヘッダデータ構造は、目標アーキテクチャに少なくとも部分的に基づく実行の最適化を可能にするために使用可能なビット幅を更に含む、請求項１０に記載のコンピュータにより実施される方法。
【請求項１２】
前記バージョン番号は、コードからシンボルを決定するために使用可能な符号化方式を示す、請求項１０〜１１のいずれか一項に記載のコンピュータにより実施される方法。
【請求項１３】
前記演算回路は、独立したアーキテクチャである、請求項１〜１２のいずれか一項に記載のコンピュータにより実施される方法。
【請求項１４】
システムであって、
プロセッサと、
前記プロセッサによる実行の結果として、前記システムに請求項１〜１３のいずれか一項に記載のコンピュータにより実施される方法を実行させる実行可能命令を含むメモリと、
を含むシステム。
【請求項１５】
実行可能命令を記憶した非一時的コンピュータ可読記憶媒体であって、前記実行可能命令は、コンピュータシステムのプロセッサにより実行された結果として、前記コンピュータシステムに、請求項１〜１３のいずれか一項に記載のコンピュータにより実施される方法を少なくとも実行させる、非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、（例えば、ディスク又はメモリに格納されるとき）演算回路により使用されるデータフットプリント（data  footprint）を削減する技術に関し、特に、本願明細書に記載の圧縮技術を利用して演算サービスからシリアル化回路を生成する技術に関する。演算回路は、無損失方法で圧縮されて、後の時点で元の回路を生成するために使用できるシリアル化回路を生成してよい。演算回路は、プログラムを生成するために使用されてよい。該プログラムの実行は、分散型コンピューティング環境の１つ以上のノードに委任できる。プログラムの正しい実行を保証するために、プロトコルが使用されてよい。ここで、第１コンピュータシステムは、プログラムの実行を第２コンピュータシステムに委任する。本発明は、特に、ブロックチェーンネットワークにおける使用に適するが、これに限定されない。
【背景技術】
【０００２】
本願明細書では、私たちは、全ての形式の電子的な、コンピュータに基づく、分散型台帳を包含するために用語「ブロックチェーン」を使用する。これらは、総意に基づくブロックチェーン及びトランザクションチェーン技術、許可及び未許可台帳、共有台帳、並びにこれらの変形を含む。他のブロックチェーン実装が提案され開発されているが、ブロックチェーン技術の最も広く知られているアプリケーションは、Ｂｉｔｃｏｉｎ台帳である。Ｂｉｔｃｏｉｎは、ここでは、便宜上及び説明の目的で参照されることがあるが、本発明はＢｉｔｃｏｉｎブロックチェーンと共に使用することに限定されず、代替のブロックチェーン実装及びプロトコルが本発明の範囲に包含されることに留意すべきである。用語「Ｂｉｔｃｏｉｎ」は、本願明細書では、Ｂｉｔｃｏｉｎプロトコルから派生した又はその変形である任意のプロトコルを含むと考えられる。
【０００３】
ブロックチェーンは、コンピュータに基づく非集中型の分散型システムとして実装されるピアツーピアの電子台帳であり、ブロックにより構成され、ブロックはまたトランザクションにより構成される。各トランザクションは、ブロックチェーンシステムの中の参加者間でデジタルアセットの制御の移転を符号化するデータ構造であり、少なくとも１つのインプット及び少なくとも１つのアウトプットを含む。各ブロックは前のブロックのハッシュを含み、これらのブロックは一緒に繋げられて、起源以来ブロックチェーンに書き込まれている全てのトランザクションの永久的な変更不可能な記録を生成する。トランザクションは、スクリプトとして知られている小さなプログラムを含む。スクリプトは、それらのインプット及びアウトプットを埋め込まれ、トランザクションのアウトプットがどのように及び誰によりアクセス可能であるかを指定する。Ｂｉｔｃｏｉｎプラットフォームでは、これらのスクリプトはスタックに基づくスクリプト言語を用いて記述される。
【０００４】
トランザクションがブロックチェーンに書き込まれるためには、検証されなければならない。ネットワークノード（マイナー）は、無効なトランザクションがネットワークから拒否され、各トランザクションが有効であることを保証するために作業を実行する。ノードにインストールされたソフトウェアクライアントは、未使用トランザクション（unspent  transaction,  UTXO）のロック及びアンロックスクリプトを実行することにより、UTXOに対してこの検証作業を実行する。ロック及びアンロックスクリプトの実行が真（TRUE）と評価する場合、トランザクションは有効であり、トランザクションはブロックチェーンに書き込まれる。したがって、トランザクションがブロックチェーンに書き込まれるためには、（ｉ）トランザクションを受信した第１ノードにより検証され、トランザクションが有効な場合には、ノードが該トランザクションをネットワーク内の他のノードに中継する、（ｉｉ）マイナーにより構築された新しいブロックに追加される、（ｉｉｉ）マイニングされる、つまり過去のトランザクションのパブリック台帳に追加される、ことが必要である。
【０００５】
ブロックチェーン技術は、暗号通貨の実装の使用のために最も広く知られているが、デジタル事業家が、Ｂｉｔｃｏｉｎの基づく暗号セキュリティシステム及び新しいシステムを実装するためにブロックチェーンに格納できるデータの両方の使用を開発し始めている。ブロックチェーンが、暗号通貨の分野に限定されない自動化タスク及びプロセスのために使用できれば、非常に有利になる。このようなソリューションは、ブロックチェーンの利益（例えば、永久性、イベントの記録の耐タンパ性、分散型処理、等）を利用しながら、それらの用途をより多様化し得る。
【０００６】
現在の研究の一分野は、「スマートコントラクト」の実装のためのブロックチェーンに基づくコンピュータプログラムの使用である。これらは、機械可読コントラクト又は合意の条項の実行を自動化するよう設計されたコンピュータプログラムである。自然言語で記述される伝統的なコントラクトと異なり、スマートコントラクトは、結果を生成するためにインプットを処理できるルールを含む機械実行可能プログラムであり、これは次に該結果に依存して動作を実行させる。
【発明の概要】
【０００７】
従って、演算回路のビットストリームへの無損失圧縮及びシリアル化のための方法を提供することが望ましい。回路のシリアル化は、格納され読み出される必要のある回路テンプレート（例えば、再利用される回路又はサブ回路）又は標準回路のコンテキストで種々の利点を提供し得る。このように、符号化、計算エンティティは、共有回路又はサブ回路を有する複数のプログラムのために回路又はサブ回路のインスタンスを繰り返し生成することを不要にすることにより、性能向上を達成できる。演算回路は、算術的演算子種類のようなデータ構造内の最頻出要素に対してエントロピー符号化を用いて、効率的に圧縮できる。シリアル化解除及び圧縮解除のための命令も、ビットストリームに埋め込むことができ、それにより、元の回路を無損失に再構成できる。
【０００８】
このような改良されたソリューションがここで考案される。
【０００９】
したがって、本発明によると、添付の請求項において定められるシステム及び／又は方法が提供される。
【００１０】
本発明によると、ブロックチェーンネットワークのノードのためのコンピュータにより実施される方法であって、前記コンピュータにより実施される方法は、演算回路のデータフットプリントを削減するために使用可能であり、前記方法は、
演算回路に関連するデータフィールドのセットのデータフィールドの第１サブセットを除去するステップであって、前記データフィールドの前記第１サブセットは、前記データフィールドの前記セットの前記データフィールドの第２サブセットから取得可能であり、前記第１サブセット及び前記第２サブセットは独立セットである、ステップと、
前記第２サブセットにエントロピー符号化方式を適用して圧縮演算回路を生成するステップと、
により前記演算回路のデータフットプリントを削減するステップを含む方法が提供され得る。前記結果として生じる圧縮演算回路は、揮発性メモリ（例えば、ＲＡＭ）、データ記憶システム（例えば、ハードディスクドライブ）、等にデータとして格納されてよい。
【００１１】
望ましくは、前記データフィールドの前記第１サブセットは、前記演算回路への入力セットの識別子を含み、前記第２サブセットは、前記入力セットの濃度（cardinality）を含む。セットの前記濃度（代替として、該セットの基数（cardinal  number））は、前記入力セットの中の入力の数を表してよい。従って、前記圧縮回路は、未圧縮回路より少ないデータビットを用いて表すことができる。
【００１２】
望ましくは、前記データフィールドの前記第１サブセットは、前記演算回路のゲート出力セットの識別子を含む。従って、前記圧縮回路は、未圧縮回路より少ないデータビットを用いて表すことができる。
【００１３】
望ましくは、前記第２サブセットは、ゲートセットを含み、前記第１サブセットは、前記ゲートセットの第１ゲートの第１入力を含む。ゲートの順序は、ゲートが評価される順序に基づき定められてよい。従って、前記圧縮回路は、未圧縮回路より少ないデータビットを用いて表すことができる。
【００１４】
望ましくは、前記第２サブセットは、ゲートセットを含み、前記第１サブセットは、前記ゲートセットの最後のゲートの最後の出力を含む。ゲートの順序は、ゲートが評価される順序に基づき定められてよい。従って、前記圧縮回路は、未圧縮回路より少ないデータビットを用いて表すことができる。
【００１５】
前記第２サブセットに前記エントロピー符号化方式を適用するステップは、
前記第２サブセットからシンボルセットを決定するステップと、
前記シンボルセットの各シンボルに、対応するコードを割り当てるステップと、
を含んでよい。多くの場合に、前記シンボルセットのシンボルは、前記シンボルの対応するコードよりサイズが大きいが（例えば、ビット幅表現）、そのような必要はない。例えば、ハフマン符号では、低い頻度で生じるシンボルは、より大きなサイズの対応するコードを有してよい。
【００１６】
望ましくは、前記シンボルセットのシンボルは、前記第２サブセットの中で少なくとも２回繰り返される。シンボルは、例えば、回路内で１回より多く生じるビット又は演算のシーケンスであってよい。
望ましくは、コードの長さは、前記コードに対応する前記シンボルの頻度に反比例する。エントロピー符号化方式により生成されるコードは、可変長を有してよく（例えば、幾つかのコードは他のコードより大きいサイズである）、短いコードほど、高い頻度で生じるシンボルに割り当てられてよい。
【００１７】
前記シンボルに対応する前記コードは、ハフマン符号のような最適プレフィクスコードに従い生成される。
【００１８】
望ましくは、前記方法は、シリアル化回路を生成するステップを更に含み、
前記シリアル化回路は、前記第２サブセットに前記エントロピー符号化方式を適用することに少なくとも部分的に基づく結果と、ヘッダデータ構造と、を含む。前記ヘッダデータ構造は、バージョン番号と、合計ワイヤ数と、を含んでよい。
【００１９】
望ましくは、前記ヘッダデータ構造は、目標アーキテクチャに少なくとも部分的に基づく実行の最適化を可能にするために使用可能なビット幅を更に含む。
【００２０】
望ましくは、前記バージョン番号は、コードからシンボルを決定するために使用可能な符号化方式を示す。
【００２１】
有利なことに、知られているインタープリタ及びコンパイラと異なり、本発明は、アーキテクチャ独立型ソリューションを提供する。更に、実行を可能にするために仮想機械（virtual  machine  (VM)）の使用を必要としない。アーキテクチャ独立型回路は、特定のハードウェア又はソフトウェアアーキテクチャ又はプラットフォームと共に動作又は子様子rために構成されない回路の表現を表してよい。これは、それぞれがアーキテクチャ固有である又はVMの使用を必要とする従来のコンパイラ及びインタープリタと対照的である。
【００２２】
また、システムであって、プロセッサと、プロセッサによる実行の結果として、システムに請求項のいずれかに記載の方法を実行させる実行可能命令を含むメモリと、を含むシステムを提供することが望ましい。
【００２３】
また、実行可能命令を記憶した非一時的コンピュータ可読記憶媒体であって、コンピュータシステムの１つ以上のプロセッサによる実行の結果として、コンピュータシステムに請求項のいずれかに記載の方法を実行させる、非一時的コンピュータ可読記憶媒体を提供することが望ましい。
【図面の簡単な説明】
【００２４】
本発明の上述の及び他の態様は、本願明細書に記載の実施形態から明らかであり、及びそれを参照して教示される。本発明の実施形態は、単なる例を用いて及び添付の図面を参照して以下に説明される。
【図１】演算回路及び演算回路を生成するために使用できるシリアル化回路を示す。
【図２】本開示の一実施形態における、検証可能な計算及び関連するアクターのフロー図である。
【図３】本開示の一実施形態による、ドメイン固有言語（ＤＳＬ）符号から二次算術プログラム（ＱＡＰ）へのワークフローの一例を示す。
【図４】一実施形態による、演算回路のサイズを削減する処理を示す。
【図５】一実施形態による、演算回路及び対応するシリアル化回路の図を示す。
【図６】少なくとも一実施形態による、回路シリアル化の図を示す。
【図７】本開示の少なくとも一実施形態を実施するために使用できるコンピューティング装置を示す。
【発明を実施するための形態】
【００２５】
以下は、本発明が一実施形態に従いどのように実施に動作し得るかの説明を提供する。本発明は、分散型コンピューティング環境の状況で実装されてよい。ここで、第１コンピューティングエンティティは、演算回路を利用して、実行が分散型コンピューティング環境のコンピューティングエンティティ（例えば、ブロックチェーンネットワークのノード）に委任できるプログラムを生成する。更に、プログラムの正しい実行は、計算上検証可能である。従って、演算回路に少なくとも部分的に基づき生成されたプログラムの実行を委任したクライアントコンピューティングエンティティは、プログラムが作業コンピューティングエンティティにより正しく実行されたことを検証できる。このように、分散型コンピューティング環境に対する種々の効率が実現されてよく、クライアントコンピューティングエンティティが別のエンティティの制御下でプログラムの実行をコンピュータシステムに委任し検証できるようにすることを含む。
【００２６】
以下により詳細に説明するように、２進データストリームへと演算回路を圧縮し及びシリアル化するための可能な実装が説明される。２進データストリームは、無損失方法で、シリアル化解除され（de−serialised）及び伸長される。回路をシリアル化する種々の利点は、（例えば、演算回路の代わりにシリアル化回路を格納することにより）回路のデータ記憶フットプリント（footprint）の削減等を実現することである。例えば、ブロックチェーンネットワークのコンテキストでは、演算回路又は演算から導出されるプログラムは、ブロックチェーンネットワークの台帳に少なくとも部分的に符号化されてよい。本願明細書に記載の技術を用いて演算回路のデータ記憶フットプリントを削減することにより、ブロックチェーン台帳に格納されるデータ量を削減し得る。ブロックチェーン台帳は、ブロックチェーンネットワークの一部又は全部のノードにより複製され得るので、ブロックチェーンに格納されるデータのデータ記憶フットプリントの僅かな削減でも高く評価される。
【００２７】
特定の構造又はブロックの構築（building  blocks）は、この転換を助けるために使用できる。１つ以上の実施形態では、この表現は、分散型の検証可能な計算を提供できる包括的なパイプラインを構築する最初のステップと考えられる。本例で提示されるブロックの構築は、本発明の実施形態により扱われる全部の可能な高レベル言語構成の包括的リストであることを意図しない。更に、提示される例の代替実装が提供され得る。これらは、当業者の範囲内に包含される。
【００２８】
私たちは、本発明の説明のための実施形態を提供する。しかしながら、重要なことに、これは、本発明が使用され得るアプリケーションの一例である。当業者は、本発明が他のコンテキスト及びアプリケーションで有利に使用可能であることを理解する。
【００２９】
私たちの例では、ユーザがドメイン固有言語（Domain  Specific  Language  (DSL)）を用いてアプリケーションを生成することを可能にするプロトコルを考える。アプリケーションが生成されると、その実行は、信頼されないパーティ（「作業者（worker）」又は「証明者（prover）」と呼ばれる）に委託できると同時に、その正確さが公に検証できる。プロトコルは、以下を保証する暗号プリミティブを利用する：
・完全性（Completeness）。つまり、プロトコルが正しく遵守されれば、誠実な検証者は出力の有効性を確信する。
・健常性（Soundness）。つまり、不正な証明者が出力の信憑性について誠実な検証者を説得することはできない。
・ゼロ知識（Zero−knowledge）。つまり、不正な証明者は、出力の有効性以外に何も分からない。
【００３０】
プロトコルの利点は：
・参加者間の通信が必要ないので、中間者攻撃（Man−in−the−middle  attack）が防止される。
・ブロックチェーン技術の使用により、悪意あるノードがデータを改ざんすることを困難にする。
・信頼できるハードウェア装置のような信頼できる第三者が回避される。
・コントラクトの検証が、コードの再実行を意味しない。計算は、ネットワーク内の全てのノードにより複製されない。代わりに、正直な実行の証明が、公のブロックチェーンに格納され、検証目的でのみ使用される。
【００３１】
このようなシステムは、種々の種類のタスク及びプロダクトに対応する種々のアプリケーションを扱うことができる。この非集中化された分散型特性により、（Ｂｉｔｃｏｉｎ）ブロックチェーンは、２つ（以上の）パーティ間の合意を解決する良好に適する環境を提供する。
【００３２】
このようなシステムは、非集中化暗号通貨システムにおいてプログラム可能性を提供し促進することを必要とする。しかしながら、従来、スマートコントラクトプログラミングは誤りの生じやすい処理であると認識されている。以下を参照：Delmolino,  K.,  et  al.  (２０１５).  Step  by  Step  Towards  Creating  a  Safe  Smart  Contract:  Lessons  and  Insights  from  a  Cryptocurrency  Lab,  and  Juels,  A.,  et  al.  (２０１３)、The  Ring  of  Gyges:  Using  Smart  Contracts  for  Crime。
【００３３】
従って、アプリケーションの記述及び読み取りを容易にするＤＳＬがプログラマにより使用可能であること、従って、エラーを低減し、プログラミング処理中の時間、努力、コスト、及びリソースを削減することは有利である。理想的には、専門家でないプログラマが、暗号方法を実装する必要がなく、種々のアプリケーションを記述できる。代わりに、コンパイラ／インタープリタが、ユーザとブロックチェーンとの間で、ソースコードを暗号プロトコルに自動的にコンパイルする。これらは、特に本発明により解決される技術的問題である。
【００３４】
図１は、本開示により実装可能な一実施形態の説明図１００である。本願明細書に記載の技術は、コンピュータプログラムの実行において利用される演算回路をシリアル化し（serialise）及びシリアル化解除する（de−serialise）ために利用されてよい。演算回路は、一実施形態に従い、クライアント（例えば、鍵生成及び検証）及び証明者（例えば、計算及び証明（proof）生成）のための暗号法ルーチンのセットにコンパイルされる２次算術問題（Quadratic  Arithmetic  Problem  (QAP)）を構築するために利用されてよい。クライアント及び証明者は、プロトコルを利用して、証明者がプログラムを正しく実行することをクライアントが効率的に検証できる方法で、プログラムの実行を証明者に委任してよい。シリアル化（serialised）回路は、演算回路と関連して必要な計算リソース（例えば、ハードディスク空間）を削減することにより、コンピュータシステムの動作を向上するために利用されてよい。一実施形態では、演算回路は、コードセットを含むシリアル化回路を生成するために圧縮されるシンボルセット（例えば、算術ゲート及び値）として表現される情報を含む。ここで、シンボルセットは、無損失方法でコードセットから導出可能である。圧縮回路の送信は、より多くの回路を送信可能にすることにより、コンピュータシステムの効率的データ伝送帯域幅を向上し得る。例えば、圧縮回路が演算回路のサイズを５０％だけ削減した場合、効率的データ伝送帯域幅は２倍になってよい。これは、最大で２倍の圧縮演算回路が同じバイト数を用いて伝送できるからである（留意すべきことに、実際のデータ伝送帯域幅の向上は、圧縮されないパケットヘッダのようなデータオーバヘッドにより、２倍より少ないことがある）。演算回路のデータフットプリントの削減は、演算回路の使用に関連するコンピュータハードウェア要件を低減し得る。例えば、本願明細書に記載の回路を使用し、格納し又はその他の場合に相互作用するコンピュータシステムにより利用される短期メモリ（例えばＲＡＭ）データ記憶、及び／又はデータ帯域幅の量を低減する。圧縮回路の送信は、より多くの回路を送信可能にすることにより、コンピュータシステムの効率的データ伝送帯域幅を向上し得る。例えば、圧縮回路が演算回路のサイズを５０％だけ削減した場合、効率的データ伝送帯域幅は２倍になってよい。これは、最大で２倍の圧縮演算回路が同じバイト数を用いて伝送できるからである（留意すべきことに、実際のデータ伝送帯域幅の向上は、圧縮されないパケットヘッダのようなデータオーバヘッドにより、２倍より少ないことがある）。演算回路のデータフットプリントの削減は、演算回路の使用に関連するコンピュータハードウェア要件を低減し得る。例えば、本願明細書に記載の回路を使用し、格納し又はその他の場合に相互作用するコンピュータシステムにより利用される短期メモリ（例えばＲＡＭ）データ記憶、及び／又はデータ帯域幅の量を低減する。
【００３５】
概して、演算回路Ｃは、フィールドＦからの値を運び論理及び／又は演算ゲートを接続するワイヤを含む。一実施形態では、回路Ｃは、演算ゲート、入力ワイヤ、及び出力ワイヤを含むデータフィールドセットにより表すことができる。回路は、目標実行環境（例えば、プロセッサアーキテクチャ）に依存して実行の最適化を可能にする、バージョン番号、ワイヤの合計数、及びビット幅ｎｂｉｔのような情報を含むヘッダを更に含んでよい。演算回路の圧縮は、他のフィールドから決定可能なデータフィールドを除去すること、エントロピー符号化方式を適用すること、及びそれらの組み合わせにより、達成されてよい。種々の種類の簡略化ルールが、演算回路が符号化されるフォーマットに基づき圧縮ルーチンの一部として、使用されてよい。例えば、幾つかの情報は、要求されなくてよい。例えば、入力のためのワイヤ識別子、出力ゲートのワイヤ識別子、第１ゲートの第１入力、最終出力ワイヤ識別子は、圧縮されてよく（例えば、シリアル化回路の部分として明示的に符号化されなくてよい）、又はそれらの任意の組み合わせ。
【００３６】
種々の実施形態ではエントロピー符号化又は符号化方式は、（例えば、上述の簡略化ルールに基づき）演算回路又はその一部に適用される。エントロピー符号化は、ソースシンボルのシリアル化のための変数長コードテーブルを生成するために利用されてよい。ハフマン符号化は、コードテーブルを生成するために利用されてよい。コードテーブルでは、より高い頻度で生じるソースシンボルがより短いコードを用いて符号化され、より低い頻度で生じるソースシンボルがより長いコードを用いて符号化され、コードの長さは、ソースシンボル又はシーケンスの生じる頻度に反比例してよい。これらの技術を用いて、演算回路は、長期データ記憶媒体（例えば、ハードディスクドライブ）及び短期データ記憶媒体（例えば、ランダムアクセスメモリ）における記憶のために少ない計算リソースしか必要としないシリアル化回路へと圧縮できる。
【００３７】
上述のようにハフマン符号は、コードテーブルを生成するために利用されてよい。ハフマン符号は、無損失データ圧縮を達成するために使用できる特定種類の最適プレフィクスコードを表す。ハフマンアルゴリズムからの出力は、ソースシンボル、例えばファイル内の文字又はコマンドを符号化するための可変長コードテーブル（例えば、コードブック）であってよい。一実施形態では、アルゴリズムは、ソースシンボルからの可能な値毎に、推定された又は測定された発生確率又は頻度（重み）からテーブルを導出する。通常、より一般的なシンボルは、あまり一般的でないシンボルより少ないビットを用いて表される。一実施形態では、ハフマン符号化は、入力重みの数と線形な時間で、コードを見付けるよう効率的に実装できる。ここで、入力重みはソートされた順序である。この方針は、シンボルを別個に符号化する方法の中で最適であってよい。ハフマン符号化は、シンボル毎の表現を選択する特定の方法を用いてよく、結果としてプレフィクスコードを生じる。つまり、何らかの特定のシンボルを表すビット列は、任意の他のシンボルを表すビット列のプレフィクスには決してならない。
【００３８】
サイズｎを有するアルファベットＡからのシンボルセット｛ａ０，ａ１，．．．，ａｎ−１｝、及び通常、確率に比例するそれらの重み｛ｐ０，ｐ１，．．．，ｐｎ−１｝が与えられると、ルートからの最小重み経路長を有するツリーが要求される。出力コードＣ（Ｐ）＝｛ｃ０，ｃ１，．．．，ｃｎ−１｝は、最小重み経路長Ｌ（Ｃ）を有する２進コードワードのタプルである。
【００３９】
シャノンのソース符号化定理により定義されるように、ヌルでない確率を有する各シンボルａｉの情報コンテンツｈ（単位：ビット）は、ｈ（ａｉ）＝ｌｏｇ２（１／ｐｉ）である。エントロピーＨ（単位：ビット）は、各シンボルの情報コンテンツのゼロでない確率ｐｉを有する全部のシンボルａｉに渡る、加重和である：
【数１】
2021518710.tif 000003
【００４０】
エントロピーは、関連する重みを有する所与のアルファベットについて理論的に可能な最小コードワード長の指標である。通常、ハフマン符号は、ユニークである必要がない。所与の確率分布のハフマン符号のセットは、該確率分布のＬ（Ｃ）を最小化するコードの空でないサブセットである。
【００４１】
シリアル化回路は、無損失方法で拡張又は伸長ルーチンを用いて元の演算回路を導出するために使用できる。留意すべきことに、この文脈で「無損失（可逆、lossless）」は、圧縮データからソースデータが完全に導出可能である種類の圧縮アルゴリズムを表す。デジタル圧縮のコンテキストでは、無損失圧縮は、ソースビットストリームの各ビットがシンボルセットを含む圧縮データから導出可能であることを表してよい。反対に、損失圧縮（不可逆圧縮、lossy  compression）は、圧縮データが、圧縮データからソースビットストリームの各ビットを導出できない種類の圧縮アルゴリズムを表してよい。損失圧縮の一例は、ＭＰ３オーディオ符号化フォーマットである。
【００４２】
図２は、本開示の一実施形態に含まれる、検証可能な計算及び関連するアクターのフロー図２００の一例を示す図である。図２に示すように、検証可能な計算の図２００は、クライアントノード２４０、作業者（例えば、証明者）ノード２５０、及び検証者ノード２６０を含んでよく、これらは本開示の一実施形態における検証可能な計算プロトコルのステップを実行することに関連する。実施形態では、クライアントノード２４０、作業者ノード２５０、又は検証者ノード２６０のうちの１つ以上は、ブロックチェーンネットワーク内のノードである。
【００４３】
一実施形態では、設定段階は、ドメイン固有言語（domain−specific  language  (DSL)）でコントラクトを記述するステップを含む。インタープリタは、クライアントノード２４０であってよく、ソースコードを入力として取り入れ、フィールドＦからのデータを運び加算及び乗算ゲートに接続する「ワイヤ」で構成される演算回路Ｃを生成する。演算回路自体は、ハードウェア回路ではなく、ＤＡＧであってよい。ワイヤは、ＤＡＧ内のエッジであってよい。しかしながら、演算回路は、ワイヤ及び論理ゲートを有する物理的回路で実装され得ることが考えられる。２０２で、クライアントノード２４０は、ＧＰＬで記述された計算Ｐを、演算回路Ｃへとコンパイルする。実施形態では、クライアントノード２４０は、演算回路Ｃ及び入力ｘを作業者ノード２５０に供給する。
【００４４】
回路Ｃから、本開示の一実施形態は、元の回路Ｃの完全な記述を提供する多項式のセットを含む二次プログラムＱを生成できる次に、２次プログラムを実行し及び検証するとき作業者ノード２５０及び検証者ノード２６０により使用されるべき公開パラメータ（public  parameter）が生成されてよい。
【００４５】
２０４で、作業者ノード２５０は、入力ｘについて回路Ｃ又は２次プログラムＱを実行し、出力がｙであることを主張する。幾つかの実施形態では、作業者ノード２５０（つまり証明者）は、｛Ｃ，ｘ，ｙ｝について有効なトランスクリプトを取得することが期待される。従って、２０６で、作業者ノード２５０は、トランスクリプトを符号化する。幾つかの例では、有効なトランスクリプト｛Ｃ，ｘ，ｙ｝は、回路ワイヤへの値の割り当てである。その結果、入力ワイヤに割り当てられた値はｘのものであり、中間値はＣの中の各ゲートの正しい動作に対応し、出力ワイヤに割り当てられた値はｙである。主張された出力が正しくない場合（つまり、ｙ≠Ｐ（ｘ））、｛Ｃ，ｘ，ｙ｝の有効なトランスクリプトは存在しない。
【００４６】
２０８で、作業者ノード２５０は、クライアントノード２４０に出力ｙを提供する。実施形態では、公開評価鍵ＥＫ、及び公開検証鍵ＶＫは、ｊクライアントノード２４０により選択された又はクライアントノード２４０からのシークレット値ｓを用いて導出される。実施形態では、作業者ノード２５０は、これらの公開鍵を用いて、特定の入力ｘに対して計算を評価する。実施形態では、出力ｙ、内部回路ワイヤの値、及びＥＫは、正当性の証明（proof−of−correctness）πを生成するために使用される。証明πは、ブロックチェーンに格納され、複数のパーティ（例えば、検証者ノード２６０）により検証され、作業者ノード２５０は、複数のパーティと個別に相互作用する必要がない。この方法では、２１０で、検証者ノード２６０は、公開検証鍵ＶＫ及び証明πを用いて支払いトランザクションを検証でき、それによりコントラクトを有効にする。
【００４７】
検証可能な計算は、計算の証明の生成を可能にする技術である。一実施形態では、このような技術は、本願明細書では作業者と呼ばれる別の計算エンティティに入力ｘについて関数ｆの評価を委託するために、クライアントにより利用される。幾つかの例では、クライアントは計算上制限され、クライアントは関数の評価を実行できない（例えば、クライアントに利用可能な計算リソースを用いる計算の期待される実行時間が、最大許容閾値を超える）。しかしながら、このような必要はなく、クライアントは、通常、入力ｘについての関数ｆの評価を、計算実行時間、計算コスト（例えば、関数の評価を実行するための計算リソースを割り当てる経済的コスト）、等のような任意の適切な基準に基づき、言わば委任してよい。
【００４８】
一実施形態では、作業者は、本開示の他の場所でより詳細に記載されるようなブロックチェーンノードのような任意の適切な計算エンティティである。一実施形態では、作業者（例えば、ブロックチェーンノード）は、入力ｘについて関数ｆを評価し、出力ｙ、及び上述のクライアント及び／又はブロックチェーンネットワークの他のノードのような他の計算エンティティにより検証可能な、出力ｙの正しさの証明πを生成する。証明は、引数（argument）とも呼ばれてよく、上述の作業者により生成された出力の正しさを決定するために、入力ｘに対して関数ｆを再計算する代わりに、証明の正しさを検証することにより、実際の計算を行うより早く検証でき、従って、計算オーバヘッドが削減できる（例えば、パワーオーバヘッド、及び計算リソースへの電力供給及び運用に関連するコストを削減する）。ゼロ知識（zero−knowledge）の検証可能な計算では、作業者は、クライアントに、作業者が特定の特性を有する入力を知っていることのアテステーション（証明、attestation）を提供する。
【００４９】
知識のゼロ知識証明の効率的な変形は、ｚｋ−ＳＮＡＲＫ（Succinct  Non−interactive  ARgument  of  Knowledge）である。一実施形態では、ｚｋ−ＳＮＡＲＫに基づく全部のペアリングは、作業者が汎用グループ演算を用いて多数のグループ要素を計算し、検証者が多数のペアリング積の式を用いて証明をチェックする処理を含む。一実施形態では、線形対話証明は有限フィールドに対して機能し、作業者の及び検証者のメッセージは、フィールド要素のベクトルを含み、符号化し、参照し、又はその他の場合にはフィールド要素を決定するために使用可能な情報を含む。
【００５０】
一実施形態では、本願明細書に記載のシステム及び方法は、ブロックチェーンのマイナー（例えば、ノード）が計算（例えば、入力ｘについての関数ｆの評価）を１回実行し、出力の正しさを検証するために使用可能な証明を生成することを可能にする。ここで、証明の正しさを評価することは、関数を評価することより計算上安価である。この状況では、演算及びタスクのコスト（つまり、どれくらい高価か）は、演算又はタスクを実行する計算上の複雑さを表してよい。一実施形態では、計算上の複雑さは、ソートアルゴリズムを実行するときの、平均的な計算コスト又は最悪の計算コストを表す。例えば、ヒープソートアルゴリズム又はクイックソートアルゴリズムであって、両方とも平均的な計算コストＯ（ｎ  ｌｏｇ  ｎ）を有するが、クイックソートは最悪の計算コストＯ（ｎ２）を有し、ヒープソートは最悪の計算コストＯ（ｎ  ｌｏｇ  ｎ）を有する。一実施形態では、入力ｘについて関数ｆを評価するための平均的な計算コスト及び／又は最悪の計算コストは、証明の正しさを評価するものより悪い。従って、本願明細書に記載のシステム及び方法の使用は、非常に有利であり、例えば、更に計算上高価なコントラクトを実行可能にでき、例えば、コントラクトは、ブロックチェーンを検証するために必要な時間を比例的に増大しなくてよい。更なる利点は、検証者システムの電力消費の削減を含み得る。これにより、検証者コンピュータシステムの効率を向上し、証明の正しさを評価するときの検証者コンピュータシステムを運用することに関連するエネルギコストを削減する。
【００５１】
一実施形態では、検証鍵ＶＫ又はその部分は、ゼロ知識プロトコルの設定段階で生成された公開パラメータから抽出でき、証明π、及び入力／出力データと一緒に、作業者により提供された宣言された正しさの証明の計算を検証するために使用できる。例えば、以上及び以下に記載したように、ロックスクリプトが検証鍵ＶＫを変更からセキュアに守ることを可能にし、及び証明πの有効性をチェックするシステム及び方法は、トランザクション検証の間に、ブロックチェーン上でゼロ知識プロトコルの実行を可能にする。従って、本開示は、計算の検証で使用される要素を格納する（例えば、Ｂｉｔｃｏｉｎに基づくネットワークで）ブロックチェーンスクリプトを用いて検証段階を実行するシステム及び方法を提案する。
【００５２】
図３は、本開示の一実施形態による、ドメイン固有言語（ＤＳＬ）符号から二次算術プログラム（ＱＡＰ）へのワークフローの一例３００を示す。具体的に、図３は、変換器２０４によりＧＰＬコード３０６に変換されるＤＳＬコード３０２を示す。ＧＰＬプリコンパイラ３０８（プリプロセッサとしても知られる）は、ＧＰＬコード３０６により参照される外部ライブラリ３１０を組み入れて、ＧＰＬ前処理コード３１２を生成する。ＧＰＬ前処理コード３１２は、演算回路３１４へと変換される。演算回路３１４は、シリアル化回路３２０を生成するために圧縮された縮小演算回路３１６を生成するよう最適化される。シリアル化回路３２０から、ＱＡＰ多項式３１８が導出される。
【００５３】
一実施形態では、ドメイン固有言語（ＤＳＬ）コード３０２は、正確な意味論を有する公式言語で記述されたアプリケーションである。一実施形態では、コード３０２は条件セットを含み、ＤＳＬコード３０２の結果は、条件セットの充足に依存する。アプリケーションの一例（例えば、スマートコントラクト）は、入力として被保険者の保険料と保険会社による被保険者への可能な補償を取り入れる保険契約である。被保険者がスマートコントラクトの期間中に損失を受けた場合（例えば、第１条件の充足）、スマートコントラクトの実行は、保険会社に保険料を分配し、被保険者に損失の補償を分配する。他方で、被保険者がスマートコントラクトの期間中に損失を受けなかった場合、スマートコントラクトの実行は、保険会社に保険料を分配し、保険会社に可能な補償を分配する。
【００５４】
一実施形態では、変換器３０４は、ソフトウェアプログラムである。該ソフトウェアプログラムは、実行の結果として、ＤＳＬで記述されたＤＳＬコード３０２のような条件セットを受信し、ＤＳＬコードを、ＧＰＬコード３０６のようなＧＰＬソースコードに変換する。一実施形態では、ＧＰＬコード３０６は、Ｃ＋＋プログラムのようなＧＰＬプログラムであり、ＤＳＬコード３０２で定義されたコードを含む。幾つかの例では、汎用プログラミング言語又は汎用言語（general−purpose  language  (GPL)）は、ＤＳＬと対照的に、広く適用可能である。汎用プログラミング言語の例はAda,  ALGOL,  アセンブリ言語,BASIC,  Boo,  C,  C++,  C#,  Clojure,  COBOL,  Crystal,  D,  Dart,  Elixir,  Erlang,  F#,  Fortran,  Go,  Harbour,  Haskell,  Idris,  Java,  JavaScript,  Julia,  Lisp,  Lua,  Modula−２,  NPL,  Oberon,  Objective−C,  Pascal,  Perl,  PHP,  Pike,  PL/I,  Python,  Ring,  RPG,  Ruby,  Rust,  Scala,  Simula,  Swift,及びTcl.  C++を含み、本開示の実施形態で参照されることがあり、命令型、オブジェクト指向型の、汎用プログラミング機能を有するが、低レベルメモリ操作のための機能も提供する汎用プログラミング言語である。留意すべきことに、図３のコンテキストでは、代替として、「コード」は、記載されるコンテキストに基づき、実行可能コード（例えば、オブジェクトコード）、ソースコード、それらの両方、又はそれらの組み合わせを表してよい。
【００５５】
一実施形態では、ＧＰＬプリコンパイラ３０８は、ＧＰＬコード３０６及び必要な外部ライブラリ３１０を処理してスタンドアロン型ＧＰＬコード３０６前処理コード３１２を生成するコンピュータ実行可能プログラムである。実施形態では、ＧＰＬプリコンパイラ３０８は、ＧＰＬコード３０６内に見付かった定数表現及びレジスタシンボルを評価する。
【００５６】
一実施形態では、外部ライブラリ３１０は、呼び出しによりＧＰＬコード３０６により利用される、予め記述されたサブルーチン、関数、クラス、コンテナ、値、及び／又は可変型の集合である。例えば、外部ライブラリ３１０を呼び出すことにより、ＧＰＬコード３０６は、機能自体を実装する必要がなく、該ライブラリの機能を得る。
【００５７】
一実施形態では、ＧＰＬ前処理コード３１２は、式及び演算子のセットを含む。演算子は、算術演算子（例えば、加算（＋）、乗算（＊）、等）、比較演算子（例えば、未満（＜）、等しい（＝）、以上（≧）、等）、条件文（例えば、if−then（？，：））、又は論理演算（例えば、ＡＮＤ（＆＆）、ＯＲ（｜｜）、ＮＯＴ（！）、ＸＯＲ（○の中に＋）、等）を含んでよい。幾つかの実施形態では、メイン関数は、所定の名称及びフォーマットを有するよう生成される。
【００５８】
一実施形態では、演算回路３１４は、変数セットに対するＤＡＧである。一実施形態では、０の入次数（indegree）ＤＡＧの全てのノードは、変数（例えば、ｘｉ）を表す入力ゲートであり、ＤＡＧの全ての他のノードは、和ゲート（＋）又は積ゲート（×）である。実施形態では、全てのゲート（ノード）は、１の出次数（outdegree）を有し、従って基本のグラフは有向木である。実施形態では、演算回路３１４は、複雑さの２つの指標：サイズ及び深さを有する。幾つかの例では、演算回路の「サイズ」は、演算回路３１４内のゲートの数に基づく。幾つかの例では、演算回路の「深さ」は、演算回路内の最長有向パスの長さに基づく。
【００５９】
一実施形態では、縮小演算回路３１６は、入力セットが与えられるとＤＳＬコード３０２の中で指定されるような、条件セットの結果を決定するために使用可能な縮小又は最小有向非巡回グラフ（directed  acyclical  graph  (DAG)）である。幾つかの実施形態では、縮小演算回路３１６は、最小化された（つまり、最小次数に縮小された）演算回路である。幾つかの実施形態では、最適演算回路は、必ずしも最小演算回路ではなくてよい（例えば、回路内の算術演算の数及び種類に依存して、特定のより大きな演算回路が、より大きな演算回路より速いと評価されてよい）。また、このような実施形態では、縮小演算回路３１６は、（例えば、最大速度、より少ないメモリ使用、最大効率プロセッサ利用率、等について）最適化されるが、必ずしも最小化された演算回路ではない。縮小演算回路３１６は、英国特許出願番号ＧＢ１７１８５０５．９号に記載された技術を用いて生成されてよい。
【００６０】
縮小演算回路３１６のような演算回路は、本願明細書に記載された技術に従い圧縮されて、シリアル化回路３２０を生成してよい。シリアル化回路３２０は、格納され読み出される必要のあるコードテンプレート又は標準アプリケーションの場合に使用されてよい。シリアル化回路３２０を利用することにより、パーティは、新しいアプリケーションが生成される度に、ＧＰＬから回路のインスタンスを生成する必要を除去できる。それにより、クライアント及び証明者がそのようなアプリケーションの特定のコードテンプレート又は部分を再利用するプロトコルの効率を向上する。シリアル化回路３２０は、算術的演算子種類のようなデータ構造内の要素の最頻出要素に対してエントロピー符号化を用いて生成されてよい。シリアル化解除及び伸長のための命令（例えば、シリアル化コードをソースシンボルにマッピングするコードブック）は、シリアル化回路の受信者がソース回路を再構成できるようにするシリアル化ビットストリームに埋め込まれてよい。
【００６１】
一実施形態では、ＱＡＰ多項式３１８は、元の演算回路（例えば、図４の演算回路３１４）の完全な記述を提供する数学的な式の中に表現された変数及び係数を有する１つ以上の式である。実施形態では、ＱＡＰ多項式のうちの多項式は、演算回路のルートにおけるそれらの評価の観点から定義される。例えば、Gennaro,  R.  et  al.,  Quadratic    Span    Programs  and  Succint  NIZKs  without  PCPs  (２０１３)に記載されている。実施形態では、ＱＡＰ多項式は、スマートコントラクトの表現として、ブロックチェーントランザクションのロックスクリプト内に符号化される。実施形態では、ロックスクリプトは、実行されると、（例えば、ロックスクリプトの実行の結果として）パラメータ値のセットを受信する。パラメータ値のセットは、スマートコントラクトの結果を決定させるために、ＱＡＰ多項式に変数として入力される。
【００６２】
実施形態では、ＧＰＬ多項式３０８は、演算ゲートを有する演算回路であってよいＧＰＬ前処理コード３１２を生成する。しかしながら、複雑な演算回路も、条件及びフロー制御文により、論理サブモジュールを埋め込むことに留意する。
【００６３】
図４は、演算回路のサイズを削減する処理４００を示す。一実施形態では、演算回路は、本体（body）に関連する又はそれにより符号化されるヘッダを有する。一実施形態では、回路の本体は、ゲートのワイヤ識別子及びゲート種類を含む。ヘッダは、ヘッダは、本体に関連するメタデータのような情報を含んでよい。一実施形態では、演算回路は、シャノンのソース符号化理論により定義されるような理論的限界に近づくエントロピーの測定により特徴付けられるデータの２進ストリームへと変換される。幾つかの例では、シリアル化回路は、２進データストリームを表し、演算回路より高いエントロピー値を有する。本開示で記載される「エントロピー」は、Shannon,  C.,  A  Mathematical  Theory  of  Communication  (１９５５)に記載の情報理論の原理に従うエントロピーを表す。
【００６４】
処理４００は、図２と関連して記載されるような任意の適切なコンピュータシステムにより実行されてよい。回路は、図２に記載されたクライアント、又は演算回路をシリアル化するタスクを委任された作業者のような別のコンピューティングエンティティにより圧縮され最適化されてよい。汎用回路が与えられると、システムはグローバルパラメータのリストを識別する。シリアル化方式における送信側及び受信側は、以下の情報：幾つかの実施形態では回路をシリアル化するために使用される符号化方式又はコードブックのような追加情報を含むバージョン番号；合計ワイヤ数N；ビット幅ｎｂｉｔ；及びそれらの組み合わせ；を交換してよい。
【００６５】
一実施形態では、処理４００を実施するシステムは、１つ以上のプロセッサにより実行されると、システムにデータフィールドのセットにより表され得る演算回路を取得させる（４０２）実行可能コードを格納するメモリを含む。一実施形態では、データフィールドのセットは、ゲート又は演算、及び入力及び出力を表すワイヤ、を含む。留意すべきことに、ワイヤは、同時に、第１ゲートの出力であり、別のゲートの入力であってよい。ワイヤは、ゲートへの入力及び出力の両方であってよい。
システムは、演算回路のデータフィールドを除去する簡略化ルールを使用してよい４０４。簡略化ルールは、演算回路のデータフィールドの第２サブセットとして参照されてよい残りのデータフィールドから導出可能な、演算回路のデータフィールドの第１サブセットを除去するために使用されてよい。第１サブセット及び第２サブセットは、演算回路のデータフィールドの特性に基づき共通の要素を有しない独立セットであってよい。演算回路の各データフィールドは、計算されるフィールド又は格納されるフィールドに分類できる。計算されるフィールドは第１サブセットに割り当てられ、格納されるフィールドは第２サブセットに割り当てられる。データフィールドが計算されるフィールド及び格納されるフィールドの両方に同時に特徴付けられない場合があり得る。計算されるフィールドは、一実施形態では、１つ以上の格納されたフィールドから導出できないデータフィールドを表す。一般的に、この概念は、説明のための例を用いて説明され得る。開始時間、終了時間、及び時間間隔期間を格納するそれぞれのデータフィールドが存在する場合、終了時間は計算されるフィールドとして識別でき、開始時間と期間は格納されるフィールドである。何故なら、終了時間は、１つ以上の格納されるフィールドから決定できるからである（例えば、EndTime=StartTime+Duration）。勿論、本例では、期間を計算されるフィールドとして表し、開始時間及び終了時間を格納されるフィールドとして表すこともできる（例えば、Duration=EndTime‐StartTime）。上述のように、フィールドのうちのどれも、プログラム上（例えば、アルゴリズムの実行により選択される）又はユーザにより選択される得る表現に基づき一方又は他方になるのではなく、計算されるフィールド及び格納されるフィールドの両方に同時になる。
【００６６】
一実施形態では、システムは、データフィールドがセットのうちの他のデータフィールドから導出可能か否かの決定に少なくとも部分的に基づき、データフィールドのセットのうちの１つ以上のデータフィールドを識別する。第１の例として、ｉｄ０から開始すると、最初のｎｉｎｐｕｔｓ個の識別子は入力のために予約されるので、簡略化ルールは、入力のワイヤ識別子を除去させてよい。従って、値ｎｉｎｐｕｔｓは、ｉｄ０からｉｄｎｉｎｐｕｔｓ−１までの識別子が入力識別子であると決定するのに十分である。第１入力ｉｄ０がに割り当てられ、第２入力がｉｄ１に割り当てられ、以下同様になるように、入力は、自動的にインクリメントされてよい。
【００６７】
追加の簡略化ルールが存在してよい。第２の例として、ｉｄｉｎｐｕｔｓから開始して、出力ゲートの全てのワイヤ識別子が自動的にインクリメントされるように、出力ゲートのワイヤ識別子は除去されてよい。例えば、回路が２つのゲートのみを含む場合、第１ゲートの出力はｉｄｉｎｐｕｔｓにより特徴付けられ、第２ゲートの出力はｉｄｉｎｐｕｔｓ＋１により特徴付けられる。ゲートの順序は、図２に従い説明されたインタープリタのようなインタープリタにより指定されるような算術演算のシーケンシャル順序であってよい。インタープリタは、英国特許出願番号ＧＢ１８０１７５３．３号に記載された技術を用いて実装されてよい。第３の例として、第１ゲートの第１入力（例えば、インタープリタにより決定された順序を有する）は、デフォルトでｉｄ０を割り当てられる。第４の例として、合計ワイヤ数Ｎが与えられると、デフォルトでｉｄＮ−１が出力ワイヤであるので、最後の出力ワイヤ識別子は必要ない。実施形態は、記載した例示的な簡略化ルールのうちのいずれも実装せず、又は全部又は一部を実装してよい。図５は、記載の簡略化ルールを適用する演算回路の一例を示す。留意すべきことに、上述のような簡略化ルールは単なる例であり、種々の実施形態が一部又は全部の簡略化ルールを実装してよく、及び他の簡略化ルールが当業者に知られていてよい。
【００６８】
エントロピー符号化が演算回路に適用されてよく、重度に繰り返される演算回路の部分（例えば、算術演算）を符号化するために必要なデータの量を削減する。システムは、幾つかの例では、データフィールドのセットのデータをコードのセットにマッピングするコードブックを決定してよい４０６。ハフマン符号化は、ソースシンボルのシリアル化のための変数長コードテーブルを生成するために利用されてよい。一般的に言うと、演算回路について定義された演算種類を含み得るＭ個の異なるソースシンボルのセットが与えられると、各シンボルｉ、０≦ｉ＜Ｍについて確率ｐｉが指定される。一実施形態では、２つの最も可能性の低いシンボルを取り入れ、それらを一緒にして新しいシンボルを形成することにより、２分木が生成される。例えば、ｐａ及びｐｂが２つの最も可能性の低いシンボルである場合、それらは新しいシンボルｐａｂを形成し、ｐａｂ＝ｐａ＋ｐｂとなるようにする。この処理は、１つのシンボルだけが存在するようになるまで繰り返される。木は、異なるコードを異なる枝に割り当てながら、逆に読み出されてよい。コードは、ハフマン符号化方式に従い割り当てられてよい。留意すべきことに、結果として生じる木は、異なる木の深さを有するリーフノードを有してよい。このような例では、一般的には、高い確率を有するシンボルほど、比較的低い確率を有するシンボルより、ルートに近い。このように、より高い頻度で生じるシンボルは、より低い頻度で生じるシンボルより少ないビットを用いて符号化できる。言い換えると、一実施形態では、コードの長さは、シンボルの頻度に反比例する。
【００６９】
２分木及びシンボルコードは、Ｍの値、及び個々のシンボル確率ｐｉ、０≦ｉ＜Ｍに従い変化してよい。例えば、Ｍが２のべき乗であり、ｐｉ＝２ｐｉ＋１、及びｐＭ−２＝２ｐＭ−１＝２ｐＭ＋１である場合、演算回路を符号化するために必要な合計ビット数Ｓｏｐｓは以下の通りである：
【数２】
2021518710.tif 000004
【００７０】
従って、演算回路の符号化のための圧縮比Ｒは以下の通りである：
【数３】
2021518710.tif 000005
【００７１】
ｐとωとの間の線形性により、つまり、ωＭ−２＝ωＭ−１＝１、及びωｉ＝２ωｉ＋１、０≦ｉ＜Ｍ−１より、上式は以下のように簡略化できる：
【数４】
2021518710.tif 000006
【００７２】
Ｍ＞５のとき、正規化された比Ｒ／ｎ０は１より小さい。つまり、実際にはｎ０に関して圧縮していない。Ｍが大きいほど、圧縮比が大きい。上述の方法で、演算回路が圧縮されてよい４０８。一実施形態では、圧縮回路は、回路の表現を符号化するデータのシリアル化ビットストリームである（例えば、上述のように元の回路の簡略化された及び／又は符号化されたバージョン）。一実施形態では、シリアル化回路は、回路の表現を符号化する本体（body）と、以下：バージョン番号、合計ワイヤ数、ビット幅ｎｂｉｔ、コードブック、又はそれらの任意の組み合わせ、のうちの１つ以上を含むヘッダと、を含む。幾つかの例では、コードブックは、複数のコードブックから選択され、適切なコードブックは、バージョン番号を問い合わせることに基づき選択できる。例えば、コードブックのリストのうちの第１コードブックは、バージョン１に対応し、リストのうちの第２コードブックはバージョン２に対応し、以下同様である。コードブックは、一実施形態では、予め生成されてよい。
【００７３】
図５は、一実施形態による演算回路５０２及びシリアル化回路５０４の図５００を示す。図５に示すシリアル化回路５０４は、簡略化ルールのセットを用いて生成された演算回路の圧縮バージョンであってよい。無損失圧縮ルーチンは、シリアル化回路５０４を生成するために演算回路５０２に適用されてよく、損失伸長ルーチンは、シリアル化回路５０４を完全に（例えば、ビット対ビットの精度で）再生するためにシリアル化回路５０４に適用されてよい。
【００７４】
図５に示すように、例示的な演算回路は、バージョン情報と、ワイヤ数を示すフィールドＮと、回路の入力（０，１，２）及び出力（４，５）の識別子と、を含むヘッダメタデータを含んでよい。留意すべきことに、幾つかのワイヤは、回路の入力でも回路の出力でもなくてよい（例えば、回路の中間入力又は出力であるワイヤであってよい）。ヘッダ内の情報は、データ構造の先頭で符号化される必要がなく、近接して符号化される必要もなく、図５の演算回路５０２に示すように、出力データはデータ構造の終わりに符号化される。演算回路は、入力及び出力のセットが続く、ゲートのデータフィールドを更に符号化する。例えば、演算回路５０２に示すように、ＡＤＤ  ０  １  ３は、識別子ｉｄ０及びｉｄ１に対応するワイヤの値を加算して識別子ｉｄ３に対応するワイヤへの出力を生成する加算ゲートを表す。
【００７５】
第２の例として、ＭＵＬ  １  ２  ４は、識別子ｉｄ１及びｉｄ２に対応するワイヤの値を乗算して識別子ｉｄ４に対応するワイヤにおいて積を生成する乗算ゲートを表す。未圧縮演算回路５０２は、従って、以下のように表されてよい：
ＶＥＲＳＩＯＮ  １
Ｎ  ６
ＩＮ  ０  １  ２
ＡＤＤ  ０  １  ３
ＭＵＬ  １  ２  ４
ＭＵＬ  ３  ４  ５
ＯＵＴ  ４  ５
【００７６】
演算回路５０２は、簡略化ルールを適用することにより、シリアル化回路５０４へと圧縮されてよい。第１簡略化ルールは、入力の数が符号化される場合には、入力のワイヤ識別子は必要ないというものであってよい。代替として、入力の数は、入力セットの基数（cardinal  number）又は濃度（cardinality）を表してよい。例えば、上述の入力（０，１，２）は、濃度２を有する。従って、この簡略化ルールに従い、演算回路は以下のように圧縮される：
ＶＥＲＳＩＯＮ  １
Ｎ  ６
２
ＡＤＤ  ０  １  ３
ＭＵＬ  １  ２  ４
ＭＵＬ  ３  ４  ５
ＯＵＴ  ４  ５
【００７７】
第２の簡略化ルールは、出力ゲートのワイヤ識別子はｎｉｎｉｎｐｕｔｓから開始して自動的にインクリメントされ得るので、出力ゲートのワイヤ識別子が必要ないというものであってよい。従って、第１及び第２簡略化ルールに従い、演算回路は以下のように圧縮される：
ＶＥＲＳＩＯＮ  １
Ｎ  ６
ＡＤＤ  ０  １
ＭＵＬ  １  ２
ＭＵＬ  ３  ４
４  ５
【００７８】
第３の簡略化ルールは、第１識別子がデフォルトでそのワイヤに割り当てられるので、第１ゲートへの第１入力が必要ないというものであってよい。従って、第１、第２及び第３簡略化ルールに従い、演算回路は以下のように圧縮される：
ＶＥＲＳＩＯＮ  １
Ｎ  ６
２
ＡＤＤ  １
ＭＵＬ  １  ２
ＭＵＬ  ３  ４
４  ５
【００７９】
第４の簡略化ルールは、最後の出力ワイヤ識別子はデフォルトで出力ワイヤであると定義されるので、最後の出力ワイヤ識別子が必要ないというものであってよい。従って、第１、第２、第３及び第４簡略化ルールに従い、演算回路は以下のように圧縮される：
ＶＥＲＳＩＯＮ  １
Ｎ  ６
２
ＡＤＤ  １
ＭＵＬ  １  ２
ＭＵＬ  ３  ４
４
【００８０】
留意すべきことに、シリアル化回路５０４は、例えばエントロピー符号化技術を用いることにより、更に圧縮されてよい。
【００８１】
図６は、回路シリアル化の図６００を示す。上側の入力演算回路６０２は、ＡＳＣＩＩで表現される。第１シリアル化回路６０４は、一実施形態では、ｎｗ＝３２であるシリアル化技術を適用した結果であり、第２シリアル化回路６０６は、ｎｗ＝８であるシリアル化技術を適用した結果である。黒塗りの四角は、一実施形態ではゼロでパディングされた、未使用ビットを表す。
【００８２】
一実施形態では、データフィールドの簡略化のルール、及び算術演算のエントロピー符号化は、演算回路の効率的なシリアル化を構成するために利用される。データ構造のヘッダは、バージョンバイト、入力／出力の数の（例えば、符号有り又は符号無し）整数値、ワイヤ数、最後のものを除く出力ワイヤ識別子のリスト（簡略化ルールと関連して記載されるように、無損失圧縮を達成したまま、最後の出力ワイヤ識別子は省略されてよい）、及びそれらの組み合わせを含んでよい。一実施形態では、バージョンバイトは、特定回路について有効である構成を埋め込む。シリアル化回路の受信側は、バージョンバイトを用いて、シリアル化回路をどのようにシリアル化解除するかを決定してよい。例えば＜バージョンバイト（又は複数のバイト）は、以下のように構造化されてよい：
ビット０及び１：命令セット（Instruction  set）。命令セットは、回路について定義される命令の種類を定義する。加算及び乗算は常に定義されるが、加算演算子は、回路機能に従い定義されてよい。例えば、ワイヤ圧縮、ワイヤ拡張、０に等しい、及び０と比較する演算子。従って、以下の構成が導入され得る：
００：Ｍ＝２の種類の演算子を有する命令セット。
０１：Ｍ＝４の種類の演算子を有する命令セット。
１０：Ｍ＝８の種類の演算子を有する命令セット。
１１：Ｍ＝１６の種類の演算子を有する命令セット。
【００８３】
ビット２、３及び４：入力／出力の数（Number  of  inputs/outputs）。このフィールドは、入力の数及び出力の数を含むフィールドのビット幅を指定する。例えば、以下の構成が導入され得る：
０００：２ビット入力、２ビット出力
００１：２ビット入力、４ビット出力
０１０：２ビット入力、８ビット出力
０１１：４ビット入力、２ビット出力
１００：４ビット入力、４ビット出力
１０１：４ビット入力、８ビット出力
１１０：８ビット入力、４ビット出力
１１１：８ビット入力、８ビット出力
【００８４】
ビット５及び６：ワイヤ識別子幅ｎｗ（Wire  identifiers  width）。回路Ｎ内のワイヤの数Ｎに依存して、特定数のビットが、ワイヤ識別子を符号化するために割り当てられる。例えば、以下の構成が導入され得る：
００：８ビットで符号化されたワイヤ識別子及びＮ
０１：１６ビットで符号化されたワイヤ識別子及びＮ
１０：３２ビットで符号化されたワイヤ識別子及びＮ
１１：６４ビットで符号化されたワイヤ識別子及びＮ
【００８５】
ビット７：ビット幅ｎｂｉｔ（Bit-width）。回路は、特定のコンピュータアーキテクチャのために最適化され得る。例えば、以下の構成が導入され得る：
０：３２ビットアーキテクチャ
１：６４ビットアーキテクチャ
【００８６】
幾つかの実施形態では、バージョン情報のためにより多くのバイトが予約でき、追加構成及びフィールドの定義を可能にする。
【００８７】
命令セットフィールドは、エントロピー符号化のための正しい辞書の選択のために使用されてよい。特定数の辞書が予め定義される場合、正しい辞書は、回路内で符号化される必要がない。例えば、Ｍが２のべき乗である場合、上述のシンボル確率を有する方式が定義できる。従って、特定命令セットが与えられると、特定の辞書が読み出される。
【００８８】
一実施形態では、回路の本体は、入力ゲートのシリアル化ワイヤ識別子及びゲート種類を含む。一実施形態では、ワイヤ識別子のサイズは、予め定義され、正数個のバイトに符号化される。その結果、ワイヤ識別子が最初に符号化され、次に符号化されたゲートが埋め込まれる。これは、データフィールドが最も近いフルバイトにパディングされる必要のあるアーキテクチャで、より効率的なシリアル化及びシリアル化解除をもたらす。留意すべきことに、少なくとも一実施形態では、高度な符号化方式も適用されてよく、ワイヤ識別子は正数個のバイトに符号化される必要ながない。シリアル化解除の間、ヘッダから受信側はＮの値を知る。ワイヤ識別子を読み出した後に、残りのビットストリームは、符号化された算術演算を表す。符号化されたゲートは、バイトに揃えられなくてよいが、複数のゲートがビット毎の演算を用いて単一バイトに埋め込むことができる。例えば、２個のシンボルａ１及びａ２が４ビットに独立に符号化される場合、情報を集約するために単一バイトｂが使用できる：
ｂ＝（ａ１＜＜４）＋ａ２
【００８９】
ビット毎の演算子「＜＜」は左シフトである。ゲートも、特定の辞書に依存して、２以上のバイトに分けることができる。
【００９０】
一実施形態では、エントロピーコーダは、デコーダが各シンボルコードの開始する場所及び終了する場所を検出できるように、コードを構築する。従って、正しいワイヤ識別子は、必要な数の入力に依存して、各算術演算に順次割り当てられる。例えば、次のワイヤがシーケンスの中でｉ番目に読み出され、次の演算子がストリームの中のビットｊで開始する場合、以下の動作が実行される：
１．位置ｊｎある第１ビットを有するシンボルａｊを検出する。
２．辞書からの情報を用いてシンボルサイズｓ（ａｊ）を計算する。
３．シンボルａｉの入力ワイヤ数ｎ（ａｊ）を計算する。
４．コードを有する算術演算及びワイヤ識別子（ｉ，ｉ＋１，．．．，ｉ＋ｎ（ａｉ）−１）を格納する。
５．次のシンボルへのポインタをｊ＋ｓ（ａｊ）へ移動する。
６．次のワイヤへのカウンタをｉ＋ｎ（ａｊ）へ移動する。
【００９１】
一実施形態では、処理は、Ｎ本のワイヤが読み出されると、終了する。ストリームが正しく符号化された場合、次のシンボルへのポインタは、Ｎ番目のワイヤが読み出されるとき、ストリームの終わりである。一実施形態では、最後のシンボルがバイトに揃えられなくてよく、例えば０パディング、１パディング、又は０１パディングを使用して最後のシンボルを揃えるためにパディングが使用されなくてよい。
【００９２】
従って、図６は、Ｍ＝３を有する辞書及びＡＳＣＩＩで符号化された初期演算回路（つまり、ｎ０＝８）を考慮するシリアル化処理のための包括的な例を示す。ハフマン符号は、シリアル化処理と関連して利用されてよい。例えば、ハフマン符号によると、再頻出演算は、１ビット値として符号化され（例えば、ＭＵＬは「０」として符号化され）、２番目の再頻出演算は２ビット値として符号化され（例えば、ＡＤＤは「１０」として符号化される）、以下同様（例えば、３番目の演算ｙは「１１」として符号化される）である。ＡＳＣＩＩ符号化に関する圧縮比は、ｎｗ＝３２の場合に２．４４であり、ｎｗ＝８の場合に８．１１である。
【００９３】
図７は、本開示の少なくとも一実施形態を実施するために使用可能なコンピューティング装置７００の簡略ブロック図を示す。種々の実施形態で、コンピューティング装置７００は、上述の図示のシステムのうちのいずれかを実装するために使用できる。例えば、コンピューティング装置７００は、データサーバ、ウェブサーバ、ポータブルコンピューティング装置、パーソナルコンピュータ、又は任意の電子コンピューティング装置として使用するために構成され得る。図７に示すように、コンピューティング装置７００は、実施形態においてバスサブシステム７０４を介して多数の周辺サブシステムと通信するよう構成され及び動作可能に結合される１つ以上のプロセッサ７０２を含み得る。幾つかの実施形態では、これらの周辺サブシステムは、メモリサブシステム７０８及びファイル／ディスク記憶サブシステム７１０を含む記憶サブシステム７０６、１つ以上のユーザインタフェース入力装置７１２、１つ以上のユーザインタフェース出力装置７１４、及びネットワークインタフェースサブシステム７１６を含む。このような記憶サブシステム７０６は、情報の一時的または長期記憶のために使用され得る。
【００９４】
幾つかの実施形態では、バスサブシステム７０４は、コンピューティング装置７００の種々のコンポーネント及びサブシステムが意図した通りに互いに通信できるようにするメカニズムを提供する。バスサブシステム７０４は、単一のバスとして概略的に示されるが、バスサブシステムの代替の実施形態は、複数のバスを利用する。幾つかの実施形態では、ネットワークインタフェースサブシステム７１６は、他のコンピューティング装置及びネットワークへのインタフェースを提供する。ネットワークインタフェースサブシステム７１６は、幾つかの実施形態では、コンピューティング装置７００からの他のシステムからデータを受信し及びそれへデータを送信するインタフェースとして機能する。幾つかの実施形態では、バスサブシステム７０４は、詳細事項、検索語、等のようなデータを通信するために利用される。
【００９５】
幾つかの実施形態では、ユーザインタフェース入力装置７１２は、キーボード、統合型マウス、トラックボール、タッチパッド、又はグラフィックタブレットのような指示装置、スキャナ、バーコードスキャナ、ディスプレイに組み込まれたタッチスクリーン、音声認識システム、マイクロフォンのようなオーディオ入力装置、及び他の種類の入力装置のような、１つ以上のユーザ入力装置を含む。通常、用語「入力装置」の使用は、コンピューティング装置７００に情報を入力する全ての可能な種類の装置及びメカニズムを含むことを意図する。幾つかの実施形態では、１つ以上のユーザインタフェース出力装置７１４は、ディスプレイサブシステム、プリンタ、又はオーディオ出力装置のような非視覚的ディスプレイ、等を含む。幾つかの実施形態では、ディスプレイサブシステムは、陰極線管（CRT）、液晶ディスプレイ（LCD）、発光ダイオード（LED）ディスプレイ、又はプロジェクションのような平面装置、又は他のディスプレイ装置を含む。通常、用語「出力装置」の使用は、コンピューティング装置７００から情報を出力する全ての可能な種類の装置及びメカニズムを含むことを意図する。１つ以上のユーザインタフェース出力装置７１４は、例えば、ユーザインタフェースを提示して、ここに記載したプロセス及び変形を実行するアプリケーションとのユーザ相互作用が適切であるとき、そのような相互作用を実現するために使用できる。
【００９６】
幾つかの実施形態では、記憶サブシステム７０６は、本開示の少なくとも１つの実施形態の機能を提供する基本プログラミング及びデータ構造を記憶するコンピュータ可読記憶媒体を提供する。アプリケーション（プログラム、コードモジュール、命令）は、１つ以上のプロセッサにより実行されると、幾つかの実施形態では、本開示の１つ以上の実施形態の機能を提供し、実施形態では、記憶サブシステム７０６に格納される。これらのアプリケーションモジュールまたは命令は、１つ以上のプロセッサ７０２により実行できる。種々の実施形態では、記憶サブシステム７０６は、更に、本開示に従い使用されるデータを格納するレポジトリを提供する。幾つかの実施形態では、記憶サブシステム７０６は、メモリサブシステム７０８及びファイル／ディスク記憶サブシステム７１０を含む。
【００９７】
実施形態では、メモリサブシステム７０８は、プログラム実行中に命令及びデータを記憶するための主ランダムアクセスメモリ（RAM）７１８、及び／又は固定命令が格納できる読み出し専用メモリ（ROM）７２０のような多数のメモリを含む。幾つかの実施形態では、ファイル／ディスク記憶サブシステム７１０は、プログラム及びデータファイルのための非一時的持続性（不揮発性）記憶を提供し、ハードディスクドライブ、関連する取り外し可能媒体と一緒のフロッピディスクドライブ、コンパクトディスク読み出し専用メモリ（CD-ROM）ドライブ、光ドライブ、取り外し可能媒体カートリッジ、又は他の同様の記憶媒体を含み得る。
【００９８】
幾つかの実施形態では、コンピューティング装置７００は、少なくとも１つのローカルクロック７２４を有する。ローカルクロック７２４は、幾つかの実施形態では、特定の開始日から刻んだ時の数を表すカウンタを表し、幾つかの実施形態では、コンピューティング装置７００の内部に配置される。種々の実施形態では、ローカルクロック７２４は、コンピューティング装置７００及びそれに含まれるサブシステムのためのプロセッサ内のデータ転送を特定のクロックバルスで同期化するために使用され、コンピューティング装置７００とデータセンタ内の他のシステムとの間の動機動作を調整するために使用できる。別の実施形態では、ローカルクロックは、プログラム可能な内部タイマである。
コンピューティング装置７００は、ポータブルコンピュータ装置、タブレットコンピュータ、ワークステーション、又は後述する任意の他の装置を含む種々のタイプのうちの任意のものであってよい。さらに、コンピューティング装置７００は、幾つかの実施形態では、１つ以上のポート（例えば、USB、ヘッドフォンジャック、光コネクタ、等）を通じてコンピューティング装置７００に接続可能な別の装置を含み得る。実施形態では、このような装置は、光ファイバコネクタを受けるよう構成されるポートを含む。したがって、幾つかの実施形態では、この装置は、光信号を、処理のために装置を接続するポートを通じてコンピューティング装置７００に送信される電気信号に変換するよう構成される。コンピュータ及びネットワークの絶えず変化する特性により、図７に示したコンピューティング装置７００の説明は、装置の好適な実施形態を説明する目的の特定の例としてのみ意図される。図７に示したシステムより多くの又は少ないコンポーネントを有する多くの他の構成が可能である。
【００９９】
明細書及び図面は、したがって、限定的意味ではなく説明的であると考えられるべきである。しかしながら、これらへの種々の変更及び変化が、特許請求の範囲に記載された発明の範囲から逸脱することなく行われてよいことが明らかである。同様に、他の変形は、本開示の範囲内にある。したがって、開示の技術は種々の変更及び代替構成を受けるが、その特定の図示の実施形態が図示され、詳細に上述された。しかしながら、本発明を開示の１又は複数の特定の形式に限定する意図はなく、反対に、添付の特許請求の範囲に定められるように、本発明の範囲に包含される全ての変更、代替構成、均等物をカバーすることを意図する。
【０１００】
開示の実施形態を記載する文脈における用語「a」及び「an」、「the」及び同様の参照は（特に以下の特許請求の範囲の文脈では）、文脈上特に示され又は明確に否定されない限り、単数及び複数の両方をカバーすることを意図する。用語「有する」、「含む」（comprising、having、including、containing）等は、特に断りのない限り、制限のない用語（つまり、「含むがそれに限定されない」を意味する）と考えられるべきである。用語「接続される（connected）」は、未修飾であり物理的接続を参照するとき、仲介物がない場合でも、部分的または全体的に含まれる、付加される、又は一緒に結合されると考えられるべきである。本開示における値の範囲の記載は、特に断りのない限り、単に、その範囲に含まれる各々の個別の値を個々に参照することの簡略表記法として機能し、各別個の値は個々に記載されたように本明細書に組み込まれると考えられるべきである。用語「セット又は集合」（例えば、「アイテムのセット」）又は「サブセット又は部分集合」の使用は、特に断りのない限り又は文脈上否定されない限り、１つ以上の構成要素を含む空ではない集合であると考えられるべきである。さらに、特に断りのない限り又は文脈上否定されない限り、対応するセットの用語「サブセット」は、必ずしも、対応するセットの真部分集合を示さず、サブセット及び対応するセットは等しくてもよい。
【０１０１】
結合的言語、例えば「A、B、及びCのうちの少なくとも１つ」又は「A、B及びCのうちの少なくとも１つ」は、特に断りのない限り又は文脈上特に明確に否定されない限り、通常、アイテム、用語、等が、A又はB又はCのいずれか、又はA及びB及びCのセットのうちの空でない任意のサブセットであり得ることを表すために使用されると文脈上理解される。例えば、３人のメンバを有するセットの説明のための例では、結合的フレーズ「A、B、及びCのうちの少なくとも１つ」又は「A、B及びCのうちの少なくとも１つ」は、以下のセット{A}、{B}、{C}、{A,B}、{A,C}、{B,C}、{A,B,C}のいずれかを表す。したがって、このような結合的言語は、通常、特定の実施形態が少なくとも１つのA、少なくとも１つのB、及び少なくとも１つのCがそれぞれ存在することを必要とすることを意味することを意図しない。
【０１０２】
記載のプロセスの動作は、特に断りのない限り又は文脈上明確に否定されない限り、任意の適切な順序で実行できる。記載のプロセス（又は変形及び／又はそれらの結合）は、実行可能命令により構成された１つ以上のコンピュータシステムの制御下で実行でき、ハードウェア又はその組み合わせにより１つ以上のプロセッサ上で連携して実行するコード（例えば、実行可能命令、１つ以上のコンピュータプログラム又は１つ以上のアプリケーション）として実装できる。幾つかの実施形態では、コードは、コンピュータ可読記憶媒体に、例えば１つ以上のプロセッサにより実行可能な複数の命令を有するコンピュータプログラムの形式で格納できる。幾つかの実施形態では、コンピュータ可読記憶媒体は、非一時的である。
【０１０３】
任意の及び全ての例の使用、又は提供された例示的な言語（例えば「のような（such  as）」）は、単に、本発明の実施形態をより良好に解明することを意図しており、特に断りのない限り本発明の範囲に限定を課すものではない。明細書中のいかなる言語も、任意の請求されない要素を本発明の実施に必須であることを示すと考えられるべきではない。
【０１０４】
本発明を実施するために発明者に知られたベストモードを含む本開示の実施形態が記載された。種々のこれらの実施形態は、前述の説明を読むことにより、当業者に明らかになる。発明者は、当業者がこのような変形を適切に利用することを期待し、発明者は、本開示の実施形態が特に記載されたものと異なる方法で実施されることを意図する。したがって、本開示の範囲は、適用される法により許容されるように、添付の特許請求の範囲に記載された主題の全ての変更及び均等物を含む。さらに、それらの全ての可能な変形における上述の要素の任意の組み合わせは、特に断りのない限り又は文脈上特に明確に否定されない限り、本開示の範囲により包含される。
【０１０５】
本願明細書に引用される公報、特許出願、特許、を含むあらゆる参考文献は、参照により各文献が個別に且つ具体的に参照により組み込まれると示され且つ本願明細書にその全体が記載されたのと同じようにここに組み込まれる。これは、英国特許出願番号ＧＢ１７１９９９８．５，ＧＢ１７１８５０５．９，ＧＢ１７２０７６８．９を含む。
【０１０６】
上述の実施形態は、本発明を限定するのではなく、説明すること、及び当業者は添付の特許請求の範囲により定められる本発明の範囲から逸脱することなく多くの代替的実施形態を考案できることに留意すべきである。特許請求の範囲において、括弧内の任意の参照符号は、請求項を限定することを意図しない。用語「有する」及び「含む」（comprising、comprises）等は、任意の請求項又は明細書全体に列挙されたもの以外の要素またはステップの存在を排除しない。本願明細書では、「有する」は「有する又は構成される」を意味し、「含む」は「含む又は構成される」を意味する。要素の単数の参照は、該要素の複数の参照を排除しない。逆も同様である。本発明は、幾つかの別個の要素を含むハードウェアにより、及び適切にプログラムされたコンピュータにより、実装できる。幾つかの手段を列挙する装置クレームでは、これらの手段のうちの幾つかは、１つの同じハードウェアアイテムにより具現化できる。単に特定の手段が相互に異なる従属請求項に記載されるという事実は、これらの手段の組み合わせが有利に使用されないことを示さない。
【図１】
2021518710.tif 000007
【図２】
2021518710.tif 000008
【図３】
2021518710.tif 000009
【図４】
2021518710.tif 000010
【図５】
2021518710.tif 000011
【図６】
2021518710.tif 000012
【図７】
2021518710.tif 000013
【国際調査報告】
2021518710.tif 000014
2021518710.tif 000015
2021518710.tif 000016