(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024041977
(43)【公開日】2024-03-27
(54)【発明の名称】演算回路のシリアル化のためのコンピュータにより実装されるシステム及び方法
(51)【国際特許分類】
H03M 7/40 20060101AFI20240319BHJP
H04L 9/32 20060101ALI20240319BHJP
H03K 19/17728 20200101ALI20240319BHJP
【FI】
H03M7/40
H04L9/32 200Z
H03K19/17728
【審査請求】有
【請求項の数】16
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2024006284
(22)【出願日】2024-01-18
(62)【分割の表示】P 2020550779の分割
【原出願日】2019-03-15
(31)【優先権主張番号】1804948.6
(32)【優先日】2018-03-27
(33)【優先権主張国・地域又は機関】GB
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
2.JAVASCRIPT
3.PYTHON
4.SWIFT
(71)【出願人】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】コヴァチ,アレグザンドラ
(72)【発明者】
【氏名】モティリンスキ,パトリック
(72)【発明者】
【氏名】マデオ,シモーネ
(72)【発明者】
【氏名】ヴィンセント,ステファヌ
(57)【要約】 (修正有)
【課題】演算回路のシリアル化のためのコンピュータにより実装されるシステム及び方法を提供する。
【解決手段】コンピュータプログラムの実行において利用される演算回路をシリアル化し及びシリアル化解除する方法であって、演算回路は、クライアント及び証明者のための暗号法ルーチンのセットにコンパイルされる2次算術問題を構築するために利用される。クライアント及び証明者は、プロトコルを利用して、証明者がプログラムを正しく実行することをクライアントが効率的に検証できる方法で、プログラムの実行を証明者に委任する。演算回路はまた、コードセットを含むシリアル化回路を生成するために圧縮されるシンボルセット(例えば、算術ゲート及び値)を含む。ここで、シンボルセットは、無損失方法でコードセットから導出可能である。シリアル化及びシリアル化解除技術は、ブロックチェーンネットワークのノードにより利用される。
【選択図】
図1
【特許請求の範囲】
【請求項1】
命令から圧縮演算回路を再構成する、コンピュータにより実施される方法であって、前記圧縮演算回路及び前記命令は、シリアル化ビットストリームの中で提供され、前記圧縮演算回路は、以下:
簡略化ルールを適用することにより、複数のデータフィールドを有する演算回路からシリアル化回路を生成し、前記簡略化ルールは、前記データフィールドの第1サブセットを除去することを含み、
エントロピー符号化方式により前記シリアル化回路を符号化する、
ことにより圧縮されており、
前記圧縮演算回路を再構成する前記方法は、
前記命令に従い前記圧縮演算回路を伸長して、前記シリアル化回路を決定するステップと、
前記命令に従い前記シリアル化回路をシリアル化解除して、前記演算回路を決定するステップと、
を含む方法。
【請求項2】
前記演算回路は、プログラムを生成するために、シンボルのセットにより表される情報を含み、前記プログラムの実行はブロックチェーンネットワークの1つ以上のノードに委任される、請求項1に記載の方法。
【請求項3】
前記演算回路は、ワイヤ識別子の合計数、前記演算回路の入力及び出力のワイヤ識別子、ゲート、並びに前記ゲートの入力及び出力のワイヤ識別子、を含む情報を含む、請求項1又は2に記載の方法。
【請求項4】
前記データフィールドの第1サブセットは、前記の伸長された演算回路からのワイヤ識別子の第1サブセットを含み、前記ワイヤ識別子の第1サブセットは、以下:
残りのワイヤ識別子、
ワイヤ識別子の前記合計数、
のうちの1つから導出可能である、請求項3に記載の方法。
【請求項5】
前記圧縮演算回路は、回路の表現を符号化する本体と、バージョン番号、ワイヤ識別子の前記合計数、ビット幅nbit、コードブック、又はそれらの任意の組み合わせ、のうちの1つ以上を含むヘッダと、を含む、請求項3又は4に記載の方法。
【請求項6】
前記命令は、コードを前記シンボルのセットにマッピングするための前記コードブックを含む、請求項2に従属する請求項5に記載の方法。
【請求項7】
前記コードブックは、前記バージョン番号をクエリすることに基づき、複数のコードブックから選択される、請求項6に記載の方法。
【請求項8】
前記エントロピー符号化方式のエントロピーコーダは、ワイヤ識別子が必要な数の入力に依存して各算術演算に順次割り当てられるように、シンボルコードが開始する場所及び終了する場所をデコーダが検出できるように、コードを構築する、請求項2~7のいずれかに記載の方法。
【請求項9】
次のワイヤがシーケンスの中のi番目のワイヤであり、次の演算子がストリームの中のビットjで開始する場合、前記方法は、
位置jで第1ビットを有するシンボルajを検出するステップと、
辞書からの情報を用いてシンボルサイズs(aj)を計算するステップと、
シンボルaiの入力ワイヤ数n(aj)を計算するステップと、
コードaiを有する算術演算及びワイヤ識別子(i,i+1,...,i+n(ai)-1)を格納するステップと、
次のシンボルへのポインタをj+s(aj)へ移動するステップと、
次のワイヤへのカウンタをi+n(aj)へ移動するステップと、
N本のワイヤが読み出されたとき、処理を終了するステップと、
を含む請求項8に記載の方法。
【請求項10】
前記演算回路はテキストファイルであり、前記テキストファイルは、
バージョン情報と、
ワイヤ識別子の前記合計数と、
前記演算回路への前記入力のワイヤ識別子を示す番号と、
少なくとも1つのゲートの順序付きリストであって、各ゲートが、演算子と、少なくとも1つの入力のワイヤ識別子と、1つの出力のワイヤ識別子と、を含む、順序付きリストと、
前記演算回路からの前記出力のワイヤ識別子を示す番号と、
を含む、請求項3に記載の方法。
【請求項11】
前記ワイヤ識別子の第1サブセットは、前記演算回路への全部の入力のワイヤ識別子を含み、前記簡略化ルールは、前記演算回路への入力の合計数を挿入することを更に含む、請求項10に記載の方法。
【請求項12】
前記ワイヤ識別子の第1サブセットは、前記ゲートの出力のワイヤ識別子を含む、請求項10又は11に記載の方法。
【請求項13】
前記ワイヤ識別子の第1サブセットは、前記順序付きリストの中の第1ゲートの第1入力を含む、請求項11~12のいずれか一項に記載の方法。
【請求項14】
前記ワイヤ識別子の第1サブセットは、最も高い番号を有する演算回路からの出力のワイヤ識別子を含む、請求項11~13のいずれか一項に記載の方法。
【請求項15】
システムであって、
プロセッサと、
前記プロセッサによる実行の結果として、前記システムに請求項1~14のいずれか一項に記載のコンピュータにより実施される方法を実行させる実行可能命令を含むメモリと、
を含むシステム。
【請求項16】
実行可能命令を記憶した非一時的コンピュータ可読記憶媒体であって、前記実行可能命令は、コンピュータシステムのプロセッサにより実行された結果として、前記コンピュータシステムに、請求項1~14のいずれか一項に記載のコンピュータにより実施される方法を少なくとも実行させる、非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概して、(例えば、ディスク又はメモリに格納されるとき)演算回路により使用されるデータフットプリント(data footprint)を削減する技術に関し、特に、本願明細書に記載の圧縮技術を利用して演算サービスからシリアル化回路を生成する技術に関する。演算回路は、無損失方法で圧縮されて、後の時点で元の回路を生成するために使用できるシリアル化回路を生成してよい。演算回路は、プログラムを生成するために使用されてよい。該プログラムの実行は、分散型コンピューティング環境の1つ以上のノードに委任できる。プログラムの正しい実行を保証するために、プロトコルが使用されてよい。ここで、第1コンピュータシステムは、プログラムの実行を第2コンピュータシステムに委任する。本発明は、特に、ブロックチェーンネットワークにおける使用に適するが、これに限定されない。
【背景技術】
【0002】
本願明細書では、私たちは、全ての形式の電子的な、コンピュータに基づく、分散型台帳を包含するために用語「ブロックチェーン」を使用する。これらは、総意に基づくブロックチェーン及びトランザクションチェーン技術、許可及び未許可台帳、共有台帳、並びにこれらの変形を含む。他のブロックチェーン実装が提案され開発されているが、ブロックチェーン技術の最も広く知られているアプリケーションは、Bitcoin台帳である。Bitcoinは、ここでは、便宜上及び説明の目的で参照されることがあるが、本発明はBitcoinブロックチェーンと共に使用することに限定されず、代替のブロックチェーン実装及びプロトコルが本発明の範囲に包含されることに留意すべきである。用語「Bitcoin」は、本願明細書では、Bitcoinプロトコルから派生した又はその変形である任意のプロトコルを含むと考えられる。
【0003】
ブロックチェーンは、コンピュータに基づく非集中型の分散型システムとして実装されるピアツーピアの電子台帳であり、ブロックにより構成され、ブロックはまたトランザクションにより構成される。各トランザクションは、ブロックチェーンシステムの中の参加者間でデジタルアセットの制御の移転を符号化するデータ構造であり、少なくとも1つのインプット及び少なくとも1つのアウトプットを含む。各ブロックは前のブロックのハッシュを含み、これらのブロックは一緒に繋げられて、起源以来ブロックチェーンに書き込まれている全てのトランザクションの永久的な変更不可能な記録を生成する。トランザクションは、スクリプトとして知られている小さなプログラムを含む。スクリプトは、それらのインプット及びアウトプットを埋め込まれ、トランザクションのアウトプットがどのように及び誰によりアクセス可能であるかを指定する。Bitcoinプラットフォームでは、これらのスクリプトはスタックに基づくスクリプト言語を用いて記述される。
【0004】
トランザクションがブロックチェーンに書き込まれるためには、検証されなければならない。ネットワークノード(マイナー)は、無効なトランザクションがネットワークから拒否され、各トランザクションが有効であることを保証するために作業を実行する。ノードにインストールされたソフトウェアクライアントは、未使用トランザクション(unspent transaction, UTXO)のロック及びアンロックスクリプトを実行することにより、UTXOに対してこの検証作業を実行する。ロック及びアンロックスクリプトの実行が真(TRUE)と評価する場合、トランザクションは有効であり、トランザクションはブロックチェーンに書き込まれる。したがって、トランザクションがブロックチェーンに書き込まれるためには、(i)トランザクションを受信した第1ノードにより検証され、トランザクションが有効な場合には、ノードが該トランザクションをネットワーク内の他のノードに中継する、(ii)マイナーにより構築された新しいブロックに追加される、(iii)マイニングされる、つまり過去のトランザクションのパブリック台帳に追加される、ことが必要である。
【0005】
ブロックチェーン技術は、暗号通貨の実装の使用のために最も広く知られているが、デジタル事業家が、Bitcoinの基づく暗号セキュリティシステム及び新しいシステムを実装するためにブロックチェーンに格納できるデータの両方の使用を開発し始めている。ブロックチェーンが、暗号通貨の分野に限定されない自動化タスク及びプロセスのために使用できれば、非常に有利になる。このようなソリューションは、ブロックチェーンの利益(例えば、永久性、イベントの記録の耐タンパ性、分散型処理、等)を利用しながら、それらの用途をより多様化し得る。
【0006】
現在の研究の一分野は、「スマートコントラクト」の実装のためのブロックチェーンに基づくコンピュータプログラムの使用である。これらは、機械可読コントラクト又は合意の条項の実行を自動化するよう設計されたコンピュータプログラムである。自然言語で記述される伝統的なコントラクトと異なり、スマートコントラクトは、結果を生成するためにインプットを処理できるルールを含む機械実行可能プログラムであり、これは次に該結果に依存して動作を実行させる。
【発明の概要】
【0007】
従って、演算回路のビットストリームへの無損失圧縮及びシリアル化のための方法を提供することが望ましい。回路のシリアル化は、格納され読み出される必要のある回路テンプレート(例えば、再利用される回路又はサブ回路)又は標準回路のコンテキストで種々の利点を提供し得る。このように、符号化、計算エンティティは、共有回路又はサブ回路を有する複数のプログラムのために回路又はサブ回路のインスタンスを繰り返し生成することを不要にすることにより、性能向上を達成できる。演算回路は、算術的演算子種類のようなデータ構造内の最頻出要素に対してエントロピー符号化を用いて、効率的に圧縮できる。シリアル化解除及び圧縮解除のための命令も、ビットストリームに埋め込むことができ、それにより、元の回路を無損失に再構成できる。
【0008】
このような改良されたソリューションがここで考案される。
【0009】
したがって、本発明によると、添付の請求項において定められるシステム及び/又は方法が提供される。
【0010】
本発明によると、ブロックチェーンネットワークのノードのためのコンピュータにより実施される方法であって、前記コンピュータにより実施される方法は、演算回路のデータフットプリントを削減するために使用可能であり、前記方法は、
演算回路に関連するデータフィールドのセットのデータフィールドの第1サブセットを除去するステップであって、前記データフィールドの前記第1サブセットは、前記データフィールドの前記セットの前記データフィールドの第2サブセットから取得可能であり、前記第1サブセット及び前記第2サブセットは独立セットである、ステップと、
前記第2サブセットにエントロピー符号化方式を適用して圧縮演算回路を生成するステップと、
により前記演算回路のデータフットプリントを削減するステップを含む方法が提供され得る。前記結果として生じる圧縮演算回路は、揮発性メモリ(例えば、RAM)、データ記憶システム(例えば、ハードディスクドライブ)、等にデータとして格納されてよい。
【0011】
望ましくは、前記データフィールドの前記第1サブセットは、前記演算回路への入力セットの識別子を含み、前記第2サブセットは、前記入力セットの濃度(cardinality)を含む。セットの前記濃度(代替として、該セットの基数(cardinal number))は、前記入力セットの中の入力の数を表してよい。従って、前記圧縮回路は、未圧縮回路より少ないデータビットを用いて表すことができる。
【0012】
望ましくは、前記データフィールドの前記第1サブセットは、前記演算回路のゲート出力セットの識別子を含む。従って、前記圧縮回路は、未圧縮回路より少ないデータビットを用いて表すことができる。
【0013】
望ましくは、前記第2サブセットは、ゲートセットを含み、前記第1サブセットは、前記ゲートセットの第1ゲートの第1入力を含む。ゲートの順序は、ゲートが評価される順序に基づき定められてよい。従って、前記圧縮回路は、未圧縮回路より少ないデータビットを用いて表すことができる。
【0014】
望ましくは、前記第2サブセットは、ゲートセットを含み、前記第1サブセットは、前記ゲートセットの最後のゲートの最後の出力を含む。ゲートの順序は、ゲートが評価される順序に基づき定められてよい。従って、前記圧縮回路は、未圧縮回路より少ないデータビットを用いて表すことができる。
【0015】
前記第2サブセットに前記エントロピー符号化方式を適用するステップは、
前記第2サブセットからシンボルセットを決定するステップと、
前記シンボルセットの各シンボルに、対応するコードを割り当てるステップと、
を含んでよい。多くの場合に、前記シンボルセットのシンボルは、前記シンボルの対応するコードよりサイズが大きいが(例えば、ビット幅表現)、そのような必要はない。例えば、ハフマン符号では、低い頻度で生じるシンボルは、より大きなサイズの対応するコードを有してよい。
【0016】
望ましくは、前記シンボルセットのシンボルは、前記第2サブセットの中で少なくとも2回繰り返される。シンボルは、例えば、回路内で1回より多く生じるビット又は演算のシーケンスであってよい。
望ましくは、コードの長さは、前記コードに対応する前記シンボルの頻度に反比例する。エントロピー符号化方式により生成されるコードは、可変長を有してよく(例えば、幾つかのコードは他のコードより大きいサイズである)、短いコードほど、高い頻度で生じるシンボルに割り当てられてよい。
【0017】
前記シンボルに対応する前記コードは、ハフマン符号のような最適プレフィクスコードに従い生成される。
【0018】
望ましくは、前記方法は、シリアル化回路を生成するステップを更に含み、
前記シリアル化回路は、前記第2サブセットに前記エントロピー符号化方式を適用することに少なくとも部分的に基づく結果と、ヘッダデータ構造と、を含む。前記ヘッダデータ構造は、バージョン番号と、合計ワイヤ数と、を含んでよい。
【0019】
望ましくは、前記ヘッダデータ構造は、目標アーキテクチャに少なくとも部分的に基づく実行の最適化を可能にするために使用可能なビット幅を更に含む。
【0020】
望ましくは、前記バージョン番号は、コードからシンボルを決定するために使用可能な符号化方式を示す。
【0021】
有利なことに、知られているインタープリタ及びコンパイラと異なり、本発明は、アーキテクチャ独立型ソリューションを提供する。更に、実行を可能にするために仮想機械(virtual machine (VM))の使用を必要としない。アーキテクチャ独立型回路は、特定のハードウェア又はソフトウェアアーキテクチャ又はプラットフォームと共に動作又は使用するために構成されない回路の表現を表してよい。これは、それぞれがアーキテクチャ固有である又はVMの使用を必要とする従来のコンパイラ及びインタープリタと対照的である。
【0022】
また、システムであって、プロセッサと、プロセッサによる実行の結果として、システムに請求項のいずれかに記載の方法を実行させる実行可能命令を含むメモリと、を含むシステムを提供することが望ましい。
【0023】
また、実行可能命令を記憶した非一時的コンピュータ可読記憶媒体であって、コンピュータシステムの1つ以上のプロセッサによる実行の結果として、コンピュータシステムに請求項のいずれかに記載の方法を実行させる、非一時的コンピュータ可読記憶媒体を提供することが望ましい。
【図面の簡単な説明】
【0024】
本発明の上述の及び他の態様は、本願明細書に記載の実施形態から明らかであり、及びそれを参照して教示される。本発明の実施形態は、単なる例を用いて及び添付の図面を参照して以下に説明される。
【
図1】演算回路及び演算回路を生成するために使用できるシリアル化回路を示す。
【
図2】本開示の一実施形態における、検証可能な計算及び関連するアクターのフロー図である。
【
図3】本開示の一実施形態による、ドメイン固有言語(DSL)符号から二次算術プログラム(QAP)へのワークフローの一例を示す。
【
図4】一実施形態による、演算回路のサイズを削減する処理を示す。
【
図5】一実施形態による、演算回路及び対応するシリアル化回路の図を示す。
【
図6】少なくとも一実施形態による、回路シリアル化の図を示す。
【
図7】本開示の少なくとも一実施形態を実施するために使用できるコンピューティング装置を示す。
【発明を実施するための形態】
【0025】
以下は、本発明が一実施形態に従いどのように実施に動作し得るかの説明を提供する。本発明は、分散型コンピューティング環境の状況で実装されてよい。ここで、第1コンピューティングエンティティは、演算回路を利用して、実行が分散型コンピューティング環境のコンピューティングエンティティ(例えば、ブロックチェーンネットワークのノード)に委任できるプログラムを生成する。更に、プログラムの正しい実行は、計算上検証可能である。従って、演算回路に少なくとも部分的に基づき生成されたプログラムの実行を委任したクライアントコンピューティングエンティティは、プログラムが作業コンピューティングエンティティにより正しく実行されたことを検証できる。このように、分散型コンピューティング環境に対する種々の効率が実現されてよく、クライアントコンピューティングエンティティが別のエンティティの制御下でプログラムの実行をコンピュータシステムに委任し検証できるようにすることを含む。
【0026】
以下により詳細に説明するように、2進データストリームへと演算回路を圧縮し及びシリアル化するための可能な実装が説明される。2進データストリームは、無損失方法で、シリアル化解除され(de-serialised)及び伸長される。回路をシリアル化する種々の利点は、(例えば、演算回路の代わりにシリアル化回路を格納することにより)回路のデータ記憶フットプリント(footprint)の削減等を実現することである。例えば、ブロックチェーンネットワークのコンテキストでは、演算回路又は演算から導出されるプログラムは、ブロックチェーンネットワークの台帳に少なくとも部分的に符号化されてよい。本願明細書に記載の技術を用いて演算回路のデータ記憶フットプリントを削減することにより、ブロックチェーン台帳に格納されるデータ量を削減し得る。ブロックチェーン台帳は、ブロックチェーンネットワークの一部又は全部のノードにより複製され得るので、ブロックチェーンに格納されるデータのデータ記憶フットプリントの僅かな削減でも高く評価される。
【0027】
特定の構造又はブロックの構築(building blocks)は、この転換を助けるために使用できる。1つ以上の実施形態では、この表現は、分散型の検証可能な計算を提供できる包括的なパイプラインを構築する最初のステップと考えられる。本例で提示されるブロックの構築は、本発明の実施形態により扱われる全部の可能な高レベル言語構成の包括的リストであることを意図しない。更に、提示される例の代替実装が提供され得る。これらは、当業者の範囲内に包含される。
【0028】
私たちは、本発明の説明のための実施形態を提供する。しかしながら、重要なことに、これは、本発明が使用され得るアプリケーションの一例である。当業者は、本発明が他のコンテキスト及びアプリケーションで有利に使用可能であることを理解する。
【0029】
私たちの例では、ユーザがドメイン固有言語(Domain Specific Language (DSL))を用いてアプリケーションを生成することを可能にするプロトコルを考える。アプリケーションが生成されると、その実行は、信頼されないパーティ(「作業者(worker)」又は「証明者(prover)」と呼ばれる)に委託できると同時に、その正確さが公に検証できる。プロトコルは、以下を保証する暗号プリミティブを利用する:
・完全性(Completeness)。つまり、プロトコルが正しく遵守されれば、誠実な検証者は出力の有効性を確信する。
・健常性(Soundness)。つまり、不正な証明者が出力の信憑性について誠実な検証者を説得することはできない。
・ゼロ知識(Zero-knowledge)。つまり、不正な証明者は、出力の有効性以外に何も分からない。
【0030】
プロトコルの利点は:
・参加者間の通信が必要ないので、中間者攻撃(Man-in-the-middle attack)が防止される。
・ブロックチェーン技術の使用により、悪意あるノードがデータを改ざんすることを困難にする。
・信頼できるハードウェア装置のような信頼できる第三者が回避される。
・コントラクトの検証が、コードの再実行を意味しない。計算は、ネットワーク内の全てのノードにより複製されない。代わりに、正直な実行の証明が、公のブロックチェーンに格納され、検証目的でのみ使用される。
【0031】
このようなシステムは、種々の種類のタスク及びプロダクトに対応する種々のアプリケーションを扱うことができる。この非集中化された分散型特性により、(Bitcoin)ブロックチェーンは、2つ(以上の)パーティ間の合意を解決する良好に適する環境を提供する。
【0032】
このようなシステムは、非集中化暗号通貨システムにおいてプログラム可能性を提供し促進することを必要とする。しかしながら、従来、スマートコントラクトプログラミングは誤りの生じやすい処理であると認識されている。以下を参照:Delmolino, K., et al. (2015). Step by Step Towards Creating a Safe Smart Contract: Lessons and Insights from a Cryptocurrency Lab, and Juels, A., et al. (2013)、The Ring of Gyges: Using Smart Contracts for Crime。
【0033】
従って、アプリケーションの記述及び読み取りを容易にするDSLがプログラマにより使用可能であること、従って、エラーを低減し、プログラミング処理中の時間、努力、コスト、及びリソースを削減することは有利である。理想的には、専門家でないプログラマが、暗号方法を実装する必要がなく、種々のアプリケーションを記述できる。代わりに、コンパイラ/インタープリタが、ユーザとブロックチェーンとの間で、ソースコードを暗号プロトコルに自動的にコンパイルする。これらは、特に本発明により解決される技術的問題である。
【0034】
図1は、本開示により実装可能な一実施形態の説明
図100である。本願明細書に記載の技術は、コンピュータプログラムの実行において利用される演算回路をシリアル化し(serialise)及びシリアル化解除する(de-serialise)ために利用されてよい。演算回路は、一実施形態に従い、クライアント(例えば、鍵生成及び検証)及び証明者(例えば、計算及び証明(proof)生成)のための暗号法ルーチンのセットにコンパイルされる2次算術問題(Quadratic Arithmetic Problem (QAP))を構築するために利用されてよい。クライアント及び証明者は、プロトコルを利用して、証明者がプログラムを正しく実行することをクライアントが効率的に検証できる方法で、プログラムの実行を証明者に委任してよい。シリアル化(serialised)回路は、演算回路と関連して必要な計算リソース(例えば、ハードディスク空間)を削減することにより、コンピュータシステムの動作を向上するために利用されてよい。一実施形態では、演算回路は、コードセットを含むシリアル化回路を生成するために圧縮されるシンボルセット(例えば、算術ゲート及び値)として表現される情報を含む。ここで、シンボルセットは、無損失方法でコードセットから導出可能である。圧縮回路の送信は、より多くの回路を送信可能にすることにより、コンピュータシステムの効率的データ伝送帯域幅を向上し得る。例えば、圧縮回路が演算回路のサイズを50%だけ削減した場合、効率的データ伝送帯域幅は2倍になってよい。これは、最大で2倍の圧縮演算回路が同じバイト数を用いて伝送できるからである(留意すべきことに、実際のデータ伝送帯域幅の向上は、圧縮されないパケットヘッダのようなデータオーバヘッドにより、2倍より少ないことがある)。演算回路のデータフットプリントの削減は、演算回路の使用に関連するコンピュータハードウェア要件を低減し得る。例えば、本願明細書に記載の回路を使用し、格納し又はその他の場合に相互作用するコンピュータシステムにより利用される短期メモリ(例えばRAM)データ記憶、及び/又はデータ帯域幅の量を低減する。圧縮回路の送信は、より多くの回路を送信可能にすることにより、コンピュータシステムの効率的データ伝送帯域幅を向上し得る。例えば、圧縮回路が演算回路のサイズを50%だけ削減した場合、効率的データ伝送帯域幅は2倍になってよい。これは、最大で2倍の圧縮演算回路が同じバイト数を用いて伝送できるからである(留意すべきことに、実際のデータ伝送帯域幅の向上は、圧縮されないパケットヘッダのようなデータオーバヘッドにより、2倍より少ないことがある)。演算回路のデータフットプリントの削減は、演算回路の使用に関連するコンピュータハードウェア要件を低減し得る。例えば、本願明細書に記載の回路を使用し、格納し又はその他の場合に相互作用するコンピュータシステムにより利用される短期メモリ(例えばRAM)データ記憶、及び/又はデータ帯域幅の量を低減する。
【0035】
概して、演算回路Cは、フィールドFからの値を運び論理及び/又は演算ゲートを接続するワイヤを含む。一実施形態では、回路Cは、演算ゲート、入力ワイヤ、及び出力ワイヤを含むデータフィールドセットにより表すことができる。回路は、目標実行環境(例えば、プロセッサアーキテクチャ)に依存して実行の最適化を可能にする、バージョン番号、ワイヤの合計数、及びビット幅nbitのような情報を含むヘッダを更に含んでよい。演算回路の圧縮は、他のフィールドから決定可能なデータフィールドを除去すること、エントロピー符号化方式を適用すること、及びそれらの組み合わせにより、達成されてよい。種々の種類の簡略化ルールが、演算回路が符号化されるフォーマットに基づき圧縮ルーチンの一部として、使用されてよい。例えば、幾つかの情報は、要求されなくてよい。例えば、入力のためのワイヤ識別子、出力ゲートのワイヤ識別子、第1ゲートの第1入力、最終出力ワイヤ識別子は、圧縮されてよく(例えば、シリアル化回路の部分として明示的に符号化されなくてよい)、又はそれらの任意の組み合わせ。
【0036】
種々の実施形態ではエントロピー符号化又は符号化方式は、(例えば、上述の簡略化ルールに基づき)演算回路又はその一部に適用される。エントロピー符号化は、ソースシンボルのシリアル化のための変数長コードテーブルを生成するために利用されてよい。ハフマン符号化は、コードテーブルを生成するために利用されてよい。コードテーブルでは、より高い頻度で生じるソースシンボルがより短いコードを用いて符号化され、より低い頻度で生じるソースシンボルがより長いコードを用いて符号化され、コードの長さは、ソースシンボル又はシーケンスの生じる頻度に反比例してよい。これらの技術を用いて、演算回路は、長期データ記憶媒体(例えば、ハードディスクドライブ)及び短期データ記憶媒体(例えば、ランダムアクセスメモリ)における記憶のために少ない計算リソースしか必要としないシリアル化回路へと圧縮できる。
【0037】
上述のようにハフマン符号は、コードテーブルを生成するために利用されてよい。ハフマン符号は、無損失データ圧縮を達成するために使用できる特定種類の最適プレフィクスコードを表す。ハフマンアルゴリズムからの出力は、ソースシンボル、例えばファイル内の文字又はコマンドを符号化するための可変長コードテーブル(例えば、コードブック)であってよい。一実施形態では、アルゴリズムは、ソースシンボルからの可能な値毎に、推定された又は測定された発生確率又は頻度(重み)からテーブルを導出する。通常、より一般的なシンボルは、あまり一般的でないシンボルより少ないビットを用いて表される。一実施形態では、ハフマン符号化は、入力重みの数と線形な時間で、コードを見付けるよう効率的に実装できる。ここで、入力重みはソートされた順序である。この方針は、シンボルを別個に符号化する方法の中で最適であってよい。ハフマン符号化は、シンボル毎の表現を選択する特定の方法を用いてよく、結果としてプレフィクスコードを生じる。つまり、何らかの特定のシンボルを表すビット列は、任意の他のシンボルを表すビット列のプレフィクスには決してならない。
【0038】
サイズnを有するアルファベットAからのシンボルセット{a0,a1,...,an-1}、及び通常、確率に比例するそれらの重み{p0,p1,...,pn-1}が与えられると、ルートからの最小重み経路長を有するツリーが要求される。出力コードC(P)={c0,c1,...,cn-1}は、最小重み経路長L(C)を有する2進コードワードのタプルである。
【0039】
シャノンのソース符号化定理により定義されるように、ヌルでない確率を有する各シンボルa
iの情報コンテンツh(単位:ビット)は、h(a
i)=log
2(1/p
i)である。エントロピーH(単位:ビット)は、各シンボルの情報コンテンツのゼロでない確率p
iを有する全部のシンボルa
iに渡る、加重和である:
【数1】
【0040】
エントロピーは、関連する重みを有する所与のアルファベットについて理論的に可能な最小コードワード長の指標である。通常、ハフマン符号は、ユニークである必要がない。所与の確率分布のハフマン符号のセットは、該確率分布のL(C)を最小化するコードの空でないサブセットである。
【0041】
シリアル化回路は、無損失方法で拡張又は伸長ルーチンを用いて元の演算回路を導出するために使用できる。留意すべきことに、この文脈で「無損失(可逆、lossless)」は、圧縮データからソースデータが完全に導出可能である種類の圧縮アルゴリズムを表す。デジタル圧縮のコンテキストでは、無損失圧縮は、ソースビットストリームの各ビットがシンボルセットを含む圧縮データから導出可能であることを表してよい。反対に、損失圧縮(不可逆圧縮、lossy compression)は、圧縮データが、圧縮データからソースビットストリームの各ビットを導出できない種類の圧縮アルゴリズムを表してよい。損失圧縮の一例は、MP3オーディオ符号化フォーマットである。
【0042】
図2は、本開示の一実施形態に含まれる、検証可能な計算及び関連するアクターのフロー
図200の一例を示す図である。
図2に示すように、検証可能な計算の
図200は、クライアントノード240、作業者(例えば、証明者)ノード250、及び検証者ノード260を含んでよく、これらは本開示の一実施形態における検証可能な計算プロトコルのステップを実行することに関連する。実施形態では、クライアントノード240、作業者ノード250、又は検証者ノード260のうちの1つ以上は、ブロックチェーンネットワーク内のノードである。
【0043】
一実施形態では、設定段階は、ドメイン固有言語(domain-specific language (DSL))でコントラクトを記述するステップを含む。インタープリタは、クライアントノード240であってよく、ソースコードを入力として取り入れ、フィールドFからのデータを運び加算及び乗算ゲートに接続する「ワイヤ」で構成される演算回路Cを生成する。演算回路自体は、ハードウェア回路ではなく、DAGであってよい。ワイヤは、DAG内のエッジであってよい。しかしながら、演算回路は、ワイヤ及び論理ゲートを有する物理的回路で実装され得ることが考えられる。202で、クライアントノード240は、GPLで記述された計算Pを、演算回路Cへとコンパイルする。実施形態では、クライアントノード240は、演算回路C及び入力xを作業者ノード250に供給する。
【0044】
回路Cから、本開示の一実施形態は、元の回路Cの完全な記述を提供する多項式のセットを含む二次プログラムQを生成できる次に、2次プログラムを実行し及び検証するとき作業者ノード250及び検証者ノード260により使用されるべき公開パラメータ(public parameter)が生成されてよい。
【0045】
204で、作業者ノード250は、入力xについて回路C又は2次プログラムQを実行し、出力がyであることを主張する。幾つかの実施形態では、作業者ノード250(つまり証明者)は、{C,x,y}について有効なトランスクリプトを取得することが期待される。従って、206で、作業者ノード250は、トランスクリプトを符号化する。幾つかの例では、有効なトランスクリプト{C,x,y}は、回路ワイヤへの値の割り当てである。その結果、入力ワイヤに割り当てられた値はxのものであり、中間値はCの中の各ゲートの正しい動作に対応し、出力ワイヤに割り当てられた値はyである。主張された出力が正しくない場合(つまり、y≠P(x))、{C,x,y}の有効なトランスクリプトは存在しない。
【0046】
208で、作業者ノード250は、クライアントノード240に出力yを提供する。実施形態では、公開評価鍵EK、及び公開検証鍵VKは、jクライアントノード240により選択された又はクライアントノード240からのシークレット値sを用いて導出される。実施形態では、作業者ノード250は、これらの公開鍵を用いて、特定の入力xに対して計算を評価する。実施形態では、出力y、内部回路ワイヤの値、及びEKは、正当性の証明(proof-of-correctness)πを生成するために使用される。証明πは、ブロックチェーンに格納され、複数のパーティ(例えば、検証者ノード260)により検証され、作業者ノード250は、複数のパーティと個別に相互作用する必要がない。この方法では、210で、検証者ノード260は、公開検証鍵VK及び証明πを用いて支払いトランザクションを検証でき、それによりコントラクトを有効にする。
【0047】
検証可能な計算は、計算の証明の生成を可能にする技術である。一実施形態では、このような技術は、本願明細書では作業者と呼ばれる別の計算エンティティに入力xについて関数fの評価を委託するために、クライアントにより利用される。幾つかの例では、クライアントは計算上制限され、クライアントは関数の評価を実行できない(例えば、クライアントに利用可能な計算リソースを用いる計算の期待される実行時間が、最大許容閾値を超える)。しかしながら、このような必要はなく、クライアントは、通常、入力xについての関数fの評価を、計算実行時間、計算コスト(例えば、関数の評価を実行するための計算リソースを割り当てる経済的コスト)、等のような任意の適切な基準に基づき、言わば委任してよい。
【0048】
一実施形態では、作業者は、本開示の他の場所でより詳細に記載されるようなブロックチェーンノードのような任意の適切な計算エンティティである。一実施形態では、作業者(例えば、ブロックチェーンノード)は、入力xについて関数fを評価し、出力y、及び上述のクライアント及び/又はブロックチェーンネットワークの他のノードのような他の計算エンティティにより検証可能な、出力yの正しさの証明πを生成する。証明は、引数(argument)とも呼ばれてよく、上述の作業者により生成された出力の正しさを決定するために、入力xに対して関数fを再計算する代わりに、証明の正しさを検証することにより、実際の計算を行うより早く検証でき、従って、計算オーバヘッドが削減できる(例えば、パワーオーバヘッド、及び計算リソースへの電力供給及び運用に関連するコストを削減する)。ゼロ知識(zero-knowledge)の検証可能な計算では、作業者は、クライアントに、作業者が特定の特性を有する入力を知っていることのアテステーション(証明、attestation)を提供する。
【0049】
知識のゼロ知識証明の効率的な変形は、zk-SNARK(Succinct Non-interactive ARgument of Knowledge)である。一実施形態では、zk-SNARKに基づく全部のペアリングは、作業者が汎用グループ演算を用いて多数のグループ要素を計算し、検証者が多数のペアリング積の式を用いて証明をチェックする処理を含む。一実施形態では、線形対話証明は有限フィールドに対して機能し、作業者の及び検証者のメッセージは、フィールド要素のベクトルを含み、符号化し、参照し、又はその他の場合にはフィールド要素を決定するために使用可能な情報を含む。
【0050】
一実施形態では、本願明細書に記載のシステム及び方法は、ブロックチェーンのマイナー(例えば、ノード)が計算(例えば、入力xについての関数fの評価)を1回実行し、出力の正しさを検証するために使用可能な証明を生成することを可能にする。ここで、証明の正しさを評価することは、関数を評価することより計算上安価である。この状況では、演算及びタスクのコスト(つまり、どれくらい高価か)は、演算又はタスクを実行する計算上の複雑さを表してよい。一実施形態では、計算上の複雑さは、ソートアルゴリズムを実行するときの、平均的な計算コスト又は最悪の計算コストを表す。例えば、ヒープソートアルゴリズム又はクイックソートアルゴリズムであって、両方とも平均的な計算コストO(n log n)を有するが、クイックソートは最悪の計算コストO(n2)を有し、ヒープソートは最悪の計算コストO(n log n)を有する。一実施形態では、入力xについて関数fを評価するための平均的な計算コスト及び/又は最悪の計算コストは、証明の正しさを評価するものより悪い。従って、本願明細書に記載のシステム及び方法の使用は、非常に有利であり、例えば、更に計算上高価なコントラクトを実行可能にでき、例えば、コントラクトは、ブロックチェーンを検証するために必要な時間を比例的に増大しなくてよい。更なる利点は、検証者システムの電力消費の削減を含み得る。これにより、検証者コンピュータシステムの効率を向上し、証明の正しさを評価するときの検証者コンピュータシステムを運用することに関連するエネルギコストを削減する。
【0051】
一実施形態では、検証鍵VK又はその部分は、ゼロ知識プロトコルの設定段階で生成された公開パラメータから抽出でき、証明π、及び入力/出力データと一緒に、作業者により提供された宣言された正しさの証明の計算を検証するために使用できる。例えば、以上及び以下に記載したように、ロックスクリプトが検証鍵VKを変更からセキュアに守ることを可能にし、及び証明πの有効性をチェックするシステム及び方法は、トランザクション検証の間に、ブロックチェーン上でゼロ知識プロトコルの実行を可能にする。従って、本開示は、計算の検証で使用される要素を格納する(例えば、Bitcoinに基づくネットワークで)ブロックチェーンスクリプトを用いて検証段階を実行するシステム及び方法を提案する。
【0052】
図3は、本開示の一実施形態による、ドメイン固有言語(DSL)符号から二次算術プログラム(QAP)へのワークフローの一例300を示す。具体的に、
図3は、変換器204によりGPLコード306に変換されるDSLコード302を示す。GPLプリコンパイラ308(プリプロセッサとしても知られる)は、GPLコード306により参照される外部ライブラリ310を組み入れて、GPL前処理コード312を生成する。GPL前処理コード312は、演算回路314へと変換される。演算回路314は、シリアル化回路320を生成するために圧縮された縮小演算回路316を生成するよう最適化される。シリアル化回路320から、QAP多項式318が導出される。
【0053】
一実施形態では、ドメイン固有言語(DSL)コード302は、正確な意味論を有する公式言語で記述されたアプリケーションである。一実施形態では、コード302は条件セットを含み、DSLコード302の結果は、条件セットの充足に依存する。アプリケーションの一例(例えば、スマートコントラクト)は、入力として被保険者の保険料と保険会社による被保険者への可能な補償を取り入れる保険契約である。被保険者がスマートコントラクトの期間中に損失を受けた場合(例えば、第1条件の充足)、スマートコントラクトの実行は、保険会社に保険料を分配し、被保険者に損失の補償を分配する。他方で、被保険者がスマートコントラクトの期間中に損失を受けなかった場合、スマートコントラクトの実行は、保険会社に保険料を分配し、保険会社に可能な補償を分配する。
【0054】
一実施形態では、変換器304は、ソフトウェアプログラムである。該ソフトウェアプログラムは、実行の結果として、DSLで記述されたDSLコード302のような条件セットを受信し、DSLコードを、GPLコード306のようなGPLソースコードに変換する。一実施形態では、GPLコード306は、C++プログラムのようなGPLプログラムであり、DSLコード302で定義されたコードを含む。幾つかの例では、汎用プログラミング言語又は汎用言語(general-purpose language (GPL))は、DSLと対照的に、広く適用可能である。汎用プログラミング言語の例は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-2, NPL, Oberon, Objective-C, Pascal, Perl, PHP, Pike, PL/I, Python, Ring, RPG, Ruby, Rust, Scala, Simula, Swift,及びTcl. C++を含み、本開示の実施形態で参照されることがあり、命令型、オブジェクト指向型の、汎用プログラミング機能を有するが、低レベルメモリ操作のための機能も提供する汎用プログラミング言語である。留意すべきことに、
図3のコンテキストでは、代替として、「コード」は、記載されるコンテキストに基づき、実行可能コード(例えば、オブジェクトコード)、ソースコード、それらの両方、又はそれらの組み合わせを表してよい。
【0055】
一実施形態では、GPLプリコンパイラ308は、GPLコード306及び必要な外部ライブラリ310を処理してスタンドアロン型GPLコード306前処理コード312を生成するコンピュータ実行可能プログラムである。実施形態では、GPLプリコンパイラ308は、GPLコード306内に見付かった定数表現及びレジスタシンボルを評価する。
【0056】
一実施形態では、外部ライブラリ310は、呼び出しによりGPLコード306により利用される、予め記述されたサブルーチン、関数、クラス、コンテナ、値、及び/又は可変型の集合である。例えば、外部ライブラリ310を呼び出すことにより、GPLコード306は、機能自体を実装する必要がなく、該ライブラリの機能を得る。
【0057】
一実施形態では、GPL前処理コード312は、式及び演算子のセットを含む。演算子は、算術演算子(例えば、加算(+)、乗算(*)、等)、比較演算子(例えば、未満(<)、等しい(=)、以上(≧)、等)、条件文(例えば、if-then(?,:))、又は論理演算(例えば、AND(&&)、OR(||)、NOT(!)、XOR(○の中に+)、等)を含んでよい。幾つかの実施形態では、メイン関数は、所定の名称及びフォーマットを有するよう生成される。
【0058】
一実施形態では、演算回路314は、変数セットに対するDAGである。一実施形態では、0の入次数(indegree)DAGの全てのノードは、変数(例えば、xi)を表す入力ゲートであり、DAGの全ての他のノードは、和ゲート(+)又は積ゲート(×)である。実施形態では、全てのゲート(ノード)は、1の出次数(outdegree)を有し、従って基本のグラフは有向木である。実施形態では、演算回路314は、複雑さの2つの指標:サイズ及び深さを有する。幾つかの例では、演算回路の「サイズ」は、演算回路314内のゲートの数に基づく。幾つかの例では、演算回路の「深さ」は、演算回路内の最長有向パスの長さに基づく。
【0059】
一実施形態では、縮小演算回路316は、入力セットが与えられるとDSLコード302の中で指定されるような、条件セットの結果を決定するために使用可能な縮小又は最小有向非巡回グラフ(directed acyclical graph (DAG))である。幾つかの実施形態では、縮小演算回路316は、最小化された(つまり、最小次数に縮小された)演算回路である。幾つかの実施形態では、最適演算回路は、必ずしも最小演算回路ではなくてよい(例えば、回路内の算術演算の数及び種類に依存して、特定のより大きな演算回路が、より大きな演算回路より速いと評価されてよい)。また、このような実施形態では、縮小演算回路316は、(例えば、最大速度、より少ないメモリ使用、最大効率プロセッサ利用率、等について)最適化されるが、必ずしも最小化された演算回路ではない。縮小演算回路316は、英国特許出願番号GB1718505.9号に記載された技術を用いて生成されてよい。
【0060】
縮小演算回路316のような演算回路は、本願明細書に記載された技術に従い圧縮されて、シリアル化回路320を生成してよい。シリアル化回路320は、格納され読み出される必要のあるコードテンプレート又は標準アプリケーションの場合に使用されてよい。シリアル化回路320を利用することにより、パーティは、新しいアプリケーションが生成される度に、GPLから回路のインスタンスを生成する必要を除去できる。それにより、クライアント及び証明者がそのようなアプリケーションの特定のコードテンプレート又は部分を再利用するプロトコルの効率を向上する。シリアル化回路320は、算術的演算子種類のようなデータ構造内の要素の最頻出要素に対してエントロピー符号化を用いて生成されてよい。シリアル化解除及び伸長のための命令(例えば、シリアル化コードをソースシンボルにマッピングするコードブック)は、シリアル化回路の受信者がソース回路を再構成できるようにするシリアル化ビットストリームに埋め込まれてよい。
【0061】
一実施形態では、QAP多項式318は、元の演算回路(例えば、
図4の演算回路314)の完全な記述を提供する数学的な式の中に表現された変数及び係数を有する1つ以上の式である。実施形態では、QAP多項式のうちの多項式は、演算回路のルートにおけるそれらの評価の観点から定義される。例えば、Gennaro, R. et al., Quadratic Span Programs and Succint NIZKs without PCPs (2013)に記載されている。実施形態では、QAP多項式は、スマートコントラクトの表現として、ブロックチェーントランザクションのロックスクリプト内に符号化される。実施形態では、ロックスクリプトは、実行されると、(例えば、ロックスクリプトの実行の結果として)パラメータ値のセットを受信する。パラメータ値のセットは、スマートコントラクトの結果を決定させるために、QAP多項式に変数として入力される。
【0062】
実施形態では、GPL多項式308は、演算ゲートを有する演算回路であってよいGPL前処理コード312を生成する。しかしながら、複雑な演算回路も、条件及びフロー制御文により、論理サブモジュールを埋め込むことに留意する。
【0063】
図4は、演算回路のサイズを削減する処理400を示す。一実施形態では、演算回路は、本体(body)に関連する又はそれにより符号化されるヘッダを有する。一実施形態では、回路の本体は、ゲートのワイヤ識別子及びゲート種類を含む。ヘッダは、ヘッダは、本体に関連するメタデータのような情報を含んでよい。一実施形態では、演算回路は、シャノンのソース符号化理論により定義されるような理論的限界に近づくエントロピーの測定により特徴付けられるデータの2進ストリームへと変換される。幾つかの例では、シリアル化回路は、2進データストリームを表し、演算回路より高いエントロピー値を有する。本開示で記載される「エントロピー」は、Shannon, C., A Mathematical Theory of Communication (1955)に記載の情報理論の原理に従うエントロピーを表す。
【0064】
処理400は、
図2と関連して記載されるような任意の適切なコンピュータシステムにより実行されてよい。回路は、
図2に記載されたクライアント、又は演算回路をシリアル化するタスクを委任された作業者のような別のコンピューティングエンティティにより圧縮され最適化されてよい。汎用回路が与えられると、システムはグローバルパラメータのリストを識別する。シリアル化方式における送信側及び受信側は、以下の情報:幾つかの実施形態では回路をシリアル化するために使用される符号化方式又はコードブックのような追加情報を含むバージョン番号;合計ワイヤ数N;ビット幅n
bit;及びそれらの組み合わせ;を交換してよい。
【0065】
一実施形態では、処理400を実施するシステムは、1つ以上のプロセッサにより実行されると、システムにデータフィールドのセットにより表され得る演算回路を取得させる(402)実行可能コードを格納するメモリを含む。一実施形態では、データフィールドのセットは、ゲート又は演算、及び入力及び出力を表すワイヤ、を含む。留意すべきことに、ワイヤは、同時に、第1ゲートの出力であり、別のゲートの入力であってよい。ワイヤは、ゲートへの入力及び出力の両方であってよい。
システムは、演算回路のデータフィールドを除去する簡略化ルールを使用してよい404。簡略化ルールは、演算回路のデータフィールドの第2サブセットとして参照されてよい残りのデータフィールドから導出可能な、演算回路のデータフィールドの第1サブセットを除去するために使用されてよい。第1サブセット及び第2サブセットは、演算回路のデータフィールドの特性に基づき共通の要素を有しない独立セットであってよい。演算回路の各データフィールドは、計算されるフィールド又は格納されるフィールドに分類できる。計算されるフィールドは第1サブセットに割り当てられ、格納されるフィールドは第2サブセットに割り当てられる。データフィールドが計算されるフィールド及び格納されるフィールドの両方に同時に特徴付けられない場合があり得る。計算されるフィールドは、一実施形態では、1つ以上の格納されたフィールドから導出できないデータフィールドを表す。一般的に、この概念は、説明のための例を用いて説明され得る。開始時間、終了時間、及び時間間隔期間を格納するそれぞれのデータフィールドが存在する場合、終了時間は計算されるフィールドとして識別でき、開始時間と期間は格納されるフィールドである。何故なら、終了時間は、1つ以上の格納されるフィールドから決定できるからである(例えば、EndTime=StartTime+Duration)。勿論、本例では、期間を計算されるフィールドとして表し、開始時間及び終了時間を格納されるフィールドとして表すこともできる(例えば、Duration=EndTime‐StartTime)。上述のように、フィールドのうちのどれも、プログラム上(例えば、アルゴリズムの実行により選択される)又はユーザにより選択される得る表現に基づき一方又は他方になるのではなく、計算されるフィールド及び格納されるフィールドの両方に同時になる。
【0066】
一実施形態では、システムは、データフィールドがセットのうちの他のデータフィールドから導出可能か否かの決定に少なくとも部分的に基づき、データフィールドのセットのうちの1つ以上のデータフィールドを識別する。第1の例として、id0から開始すると、最初のninputs個の識別子は入力のために予約されるので、簡略化ルールは、入力のワイヤ識別子を除去させてよい。従って、値ninputsは、id0からidninputs-1までの識別子が入力識別子であると決定するのに十分である。第1入力がid0に割り当てられ、第2入力がid1に割り当てられ、以下同様になるように、入力は、自動的にインクリメントされてよい。
【0067】
追加の簡略化ルールが存在してよい。第2の例として、id
inputsから開始して、出力ゲートの全てのワイヤ識別子が自動的にインクリメントされるように、出力ゲートのワイヤ識別子は除去されてよい。例えば、回路が2つのゲートのみを含む場合、第1ゲートの出力はid
inputsにより特徴付けられ、第2ゲートの出力はid
inputs+1により特徴付けられる。ゲートの順序は、
図2に従い説明されたインタープリタのようなインタープリタにより指定されるような算術演算のシーケンシャル順序であってよい。インタープリタは、英国特許出願番号GB1801753.3号に記載された技術を用いて実装されてよい。第3の例として、第1ゲートの第1入力(例えば、インタープリタにより決定された順序を有する)は、デフォルトでid
0を割り当てられる。第4の例として、合計ワイヤ数Nが与えられると、デフォルトでid
N-1が出力ワイヤであるので、最後の出力ワイヤ識別子は必要ない。実施形態は、記載した例示的な簡略化ルールのうちのいずれも実装せず、又は全部又は一部を実装してよい。
図5は、記載の簡略化ルールを適用する演算回路の一例を示す。留意すべきことに、上述のような簡略化ルールは単なる例であり、種々の実施形態が一部又は全部の簡略化ルールを実装してよく、及び他の簡略化ルールが当業者に知られていてよい。
【0068】
エントロピー符号化が演算回路に適用されてよく、重度に繰り返される演算回路の部分(例えば、算術演算)を符号化するために必要なデータの量を削減する。システムは、幾つかの例では、データフィールドのセットのデータをコードのセットにマッピングするコードブックを決定してよい406。ハフマン符号化は、ソースシンボルのシリアル化のための変数長コードテーブルを生成するために利用されてよい。一般的に言うと、演算回路について定義された演算種類を含み得るM個の異なるソースシンボルのセットが与えられると、各シンボルi、0≦i<Mについて確率piが指定される。一実施形態では、2つの最も可能性の低いシンボルを取り入れ、それらを一緒にして新しいシンボルを形成することにより、2分木が生成される。例えば、pa及びpbが2つの最も可能性の低いシンボルである場合、それらは新しいシンボルpabを形成し、pab=pa+pbとなるようにする。この処理は、1つのシンボルだけが存在するようになるまで繰り返される。木は、異なるコードを異なる枝に割り当てながら、逆に読み出されてよい。コードは、ハフマン符号化方式に従い割り当てられてよい。留意すべきことに、結果として生じる木は、異なる木の深さを有するリーフノードを有してよい。このような例では、一般的には、高い確率を有するシンボルほど、比較的低い確率を有するシンボルより、ルートに近い。このように、より高い頻度で生じるシンボルは、より低い頻度で生じるシンボルより少ないビットを用いて符号化できる。言い換えると、一実施形態では、コードの長さは、シンボルの頻度に反比例する。
【0069】
2分木及びシンボルコードは、Mの値、及び個々のシンボル確率p
i、0≦i<Mに従い変化してよい。例えば、Mが2のべき乗であり、p
i=2p
i+1、及びp
M-2=2p
M-1=2p
M+1である場合、演算回路を符号化するために必要な合計ビット数S
opsは以下の通りである:
【数2】
【0070】
従って、演算回路の符号化のための圧縮比Rは以下の通りである:
【数3】
【0071】
pとωとの間の線形性により、つまり、ω
M-2=ω
M-1=1、及びω
i=2ω
i+1、0≦i<M-1より、上式は以下のように簡略化できる:
【数4】
【0072】
M>5のとき、正規化された比R/n0は1より小さい。つまり、実際にはn0に関して圧縮していない。Mが大きいほど、圧縮比が大きい。上述の方法で、演算回路が圧縮されてよい408。一実施形態では、圧縮回路は、回路の表現を符号化するデータのシリアル化ビットストリームである(例えば、上述のように元の回路の簡略化された及び/又は符号化されたバージョン)。一実施形態では、シリアル化回路は、回路の表現を符号化する本体(body)と、以下:バージョン番号、合計ワイヤ数、ビット幅nbit、コードブック、又はそれらの任意の組み合わせ、のうちの1つ以上を含むヘッダと、を含む。幾つかの例では、コードブックは、複数のコードブックから選択され、適切なコードブックは、バージョン番号を問い合わせることに基づき選択できる。例えば、コードブックのリストのうちの第1コードブックは、バージョン1に対応し、リストのうちの第2コードブックはバージョン2に対応し、以下同様である。コードブックは、一実施形態では、予め生成されてよい。
【0073】
図5は、一実施形態による演算回路502及びシリアル化回路504の
図500を示す。
図5に示すシリアル化回路504は、簡略化ルールのセットを用いて生成された演算回路の圧縮バージョンであってよい。無損失圧縮ルーチンは、シリアル化回路504を生成するために演算回路502に適用されてよく、損失伸長ルーチンは、シリアル化回路504を完全に(例えば、ビット対ビットの精度で)再生するためにシリアル化回路504に適用されてよい。
【0074】
図5に示すように、例示的な演算回路は、バージョン情報と、ワイヤ数を示すフィールドNと、回路の入力(0,1,2)及び出力(4,5)の識別子と、を含むヘッダメタデータを含んでよい。留意すべきことに、幾つかのワイヤは、回路の入力でも回路の出力でもなくてよい(例えば、回路の中間入力又は出力であるワイヤであってよい)。ヘッダ内の情報は、データ構造の先頭で符号化される必要がなく、近接して符号化される必要もなく、
図5の演算回路502に示すように、出力データはデータ構造の終わりに符号化される。演算回路は、入力及び出力のセットが続く、ゲートのデータフィールドを更に符号化する。例えば、演算回路502に示すように、ADD 0 1 3は、識別子id
0及びid
1に対応するワイヤの値を加算して識別子id
3に対応するワイヤへの出力を生成する加算ゲートを表す。
【0075】
第2の例として、MUL 1 2 4は、識別子id1及びid2に対応するワイヤの値を乗算して識別子id4に対応するワイヤにおいて積を生成する乗算ゲートを表す。未圧縮演算回路502は、従って、以下のように表されてよい:
VERSION 1
N 6
IN 0 1 2
ADD 0 1 3
MUL 1 2 4
MUL 3 4 5
OUT 4 5
【0076】
演算回路502は、簡略化ルールを適用することにより、シリアル化回路504へと圧縮されてよい。第1簡略化ルールは、入力の数が符号化される場合には、入力のワイヤ識別子は必要ないというものであってよい。代替として、入力の数は、入力セットの基数(cardinal number)又は濃度(cardinality)を表してよい。例えば、上述の入力(0,1,2)は、濃度2を有する。従って、この簡略化ルールに従い、演算回路は以下のように圧縮される:
VERSION 1
N 6
2
ADD 0 1 3
MUL 1 2 4
MUL 3 4 5
OUT 4 5
【0077】
第2の簡略化ルールは、出力ゲートのワイヤ識別子はnininputsから開始して自動的にインクリメントされ得るので、出力ゲートのワイヤ識別子が必要ないというものであってよい。従って、第1及び第2簡略化ルールに従い、演算回路は以下のように圧縮される:
VERSION 1
N 6
ADD 0 1
MUL 1 2
MUL 3 4
4 5
【0078】
第3の簡略化ルールは、第1識別子がデフォルトでそのワイヤに割り当てられるので、第1ゲートへの第1入力が必要ないというものであってよい。従って、第1、第2及び第3簡略化ルールに従い、演算回路は以下のように圧縮される:
VERSION 1
N 6
2
ADD 1
MUL 1 2
MUL 3 4
4 5
【0079】
第4の簡略化ルールは、最後の出力ワイヤ識別子はデフォルトで出力ワイヤであると定義されるので、最後の出力ワイヤ識別子が必要ないというものであってよい。従って、第1、第2、第3及び第4簡略化ルールに従い、演算回路は以下のように圧縮される:
VERSION 1
N 6
2
ADD 1
MUL 1 2
MUL 3 4
4
【0080】
留意すべきことに、シリアル化回路504は、例えばエントロピー符号化技術を用いることにより、更に圧縮されてよい。
【0081】
図6は、回路シリアル化の
図600を示す。上側の入力演算回路602は、ASCIIで表現される。第1シリアル化回路604は、一実施形態では、n
w=32であるシリアル化技術を適用した結果であり、第2シリアル化回路606は、n
w=8であるシリアル化技術を適用した結果である。黒塗りの四角は、一実施形態ではゼロでパディングされた、未使用ビットを表す。
【0082】
一実施形態では、データフィールドの簡略化のルール、及び算術演算のエントロピー符号化は、演算回路の効率的なシリアル化を構成するために利用される。データ構造のヘッダは、バージョンバイト、入力/出力の数の(例えば、符号有り又は符号無し)整数値、ワイヤ数、最後のものを除く出力ワイヤ識別子のリスト(簡略化ルールと関連して記載されるように、無損失圧縮を達成したまま、最後の出力ワイヤ識別子は省略されてよい)、及びそれらの組み合わせを含んでよい。一実施形態では、バージョンバイトは、特定回路について有効である構成を埋め込む。シリアル化回路の受信側は、バージョンバイトを用いて、シリアル化回路をどのようにシリアル化解除するかを決定してよい。例えば<バージョンバイト(又は複数のバイト)は、以下のように構造化されてよい:
ビット0及び1:命令セット(Instruction set)。命令セットは、回路について定義される命令の種類を定義する。加算及び乗算は常に定義されるが、加算演算子は、回路機能に従い定義されてよい。例えば、ワイヤ圧縮、ワイヤ拡張、0に等しい、及び0と比較する演算子。従って、以下の構成が導入され得る:
00:M=2の種類の演算子を有する命令セット。
01:M=4の種類の演算子を有する命令セット。
10:M=8の種類の演算子を有する命令セット。
11:M=16の種類の演算子を有する命令セット。
【0083】
ビット2、3及び4:入力/出力の数(Number of inputs/outputs)。このフィールドは、入力の数及び出力の数を含むフィールドのビット幅を指定する。例えば、以下の構成が導入され得る:
000:2ビット入力、2ビット出力
001:2ビット入力、4ビット出力
010:2ビット入力、8ビット出力
011:4ビット入力、2ビット出力
100:4ビット入力、4ビット出力
101:4ビット入力、8ビット出力
110:8ビット入力、4ビット出力
111:8ビット入力、8ビット出力
【0084】
ビット5及び6:ワイヤ識別子幅nw(Wire identifiers width)。回路N内のワイヤの数Nに依存して、特定数のビットが、ワイヤ識別子を符号化するために割り当てられる。例えば、以下の構成が導入され得る:
00:8ビットで符号化されたワイヤ識別子及びN
01:16ビットで符号化されたワイヤ識別子及びN
10:32ビットで符号化されたワイヤ識別子及びN
11:64ビットで符号化されたワイヤ識別子及びN
【0085】
ビット7:ビット幅nbit(Bit-width)。回路は、特定のコンピュータアーキテクチャのために最適化され得る。例えば、以下の構成が導入され得る:
0:32ビットアーキテクチャ
1:64ビットアーキテクチャ
【0086】
幾つかの実施形態では、バージョン情報のためにより多くのバイトが予約でき、追加構成及びフィールドの定義を可能にする。
【0087】
命令セットフィールドは、エントロピー符号化のための正しい辞書の選択のために使用されてよい。特定数の辞書が予め定義される場合、正しい辞書は、回路内で符号化される必要がない。例えば、Mが2のべき乗である場合、上述のシンボル確率を有する方式が定義できる。従って、特定命令セットが与えられると、特定の辞書が読み出される。
【0088】
一実施形態では、回路の本体は、入力ゲートのシリアル化ワイヤ識別子及びゲート種類を含む。一実施形態では、ワイヤ識別子のサイズは、予め定義され、正数個のバイトに符号化される。その結果、ワイヤ識別子が最初に符号化され、次に符号化されたゲートが埋め込まれる。これは、データフィールドが最も近いフルバイトにパディングされる必要のあるアーキテクチャで、より効率的なシリアル化及びシリアル化解除をもたらす。留意すべきことに、少なくとも一実施形態では、高度な符号化方式も適用されてよく、ワイヤ識別子は正数個のバイトに符号化される必要ながない。シリアル化解除の間、ヘッダから受信側はNの値を知る。ワイヤ識別子を読み出した後に、残りのビットストリームは、符号化された算術演算を表す。符号化されたゲートは、バイトに揃えられなくてよいが、複数のゲートがビット毎の演算を用いて単一バイトに埋め込むことができる。例えば、2個のシンボルa1及びa2が4ビットに独立に符号化される場合、情報を集約するために単一バイトbが使用できる:
b=(a1<<4)+a2
【0089】
ビット毎の演算子「<<」は左シフトである。ゲートも、特定の辞書に依存して、2以上のバイトに分けることができる。
【0090】
一実施形態では、エントロピーコーダは、デコーダが各シンボルコードの開始する場所及び終了する場所を検出できるように、コードを構築する。従って、正しいワイヤ識別子は、必要な数の入力に依存して、各算術演算に順次割り当てられる。例えば、次のワイヤがシーケンスの中でi番目に読み出され、次の演算子がストリームの中のビットjで開始する場合、以下の動作が実行される:
1.位置jnある第1ビットを有するシンボルajを検出する。
2.辞書からの情報を用いてシンボルサイズs(aj)を計算する。
3.シンボルaiの入力ワイヤ数n(aj)を計算する。
4.コードを有する算術演算及びワイヤ識別子(i,i+1,...,i+n(ai)-1)を格納する。
5.次のシンボルへのポインタをj+s(aj)へ移動する。
6.次のワイヤへのカウンタをi+n(aj)へ移動する。
【0091】
一実施形態では、処理は、N本のワイヤが読み出されると、終了する。ストリームが正しく符号化された場合、次のシンボルへのポインタは、N番目のワイヤが読み出されるとき、ストリームの終わりである。一実施形態では、最後のシンボルがバイトに揃えられなくてよく、例えば0パディング、1パディング、又は01パディングを使用して最後のシンボルを揃えるためにパディングが使用されなくてよい。
【0092】
従って、
図6は、M=3を有する辞書及びASCIIで符号化された初期演算回路(つまり、n
0=8)を考慮するシリアル化処理のための包括的な例を示す。ハフマン符号は、シリアル化処理と関連して利用されてよい。例えば、ハフマン符号によると、再頻出演算は、1ビット値として符号化され(例えば、MULは「0」として符号化され)、2番目の再頻出演算は2ビット値として符号化され(例えば、ADDは「10」として符号化される)、以下同様(例えば、3番目の演算yは「11」として符号化される)である。ASCII符号化に関する圧縮比は、n
w=32の場合に2.44であり、n
w=8の場合に8.11である。
【0093】
図7は、本開示の少なくとも一実施形態を実施するために使用可能なコンピューティング装置700の簡略ブロック図を示す。種々の実施形態で、コンピューティング装置700は、上述の図示のシステムのうちのいずれかを実装するために使用できる。例えば、コンピューティング装置700は、データサーバ、ウェブサーバ、ポータブルコンピューティング装置、パーソナルコンピュータ、又は任意の電子コンピューティング装置として使用するために構成され得る。
図7に示すように、コンピューティング装置700は、実施形態においてバスサブシステム704を介して多数の周辺サブシステムと通信するよう構成され及び動作可能に結合される1つ以上のプロセッサ702を含み得る。幾つかの実施形態では、これらの周辺サブシステムは、メモリサブシステム708及びファイル/ディスク記憶サブシステム710を含む記憶サブシステム706、1つ以上のユーザインタフェース入力装置712、1つ以上のユーザインタフェース出力装置714、及びネットワークインタフェースサブシステム716を含む。このような記憶サブシステム706は、情報の一時的または長期記憶のために使用され得る。
【0094】
幾つかの実施形態では、バスサブシステム704は、コンピューティング装置700の種々のコンポーネント及びサブシステムが意図した通りに互いに通信できるようにするメカニズムを提供する。バスサブシステム704は、単一のバスとして概略的に示されるが、バスサブシステムの代替の実施形態は、複数のバスを利用する。幾つかの実施形態では、ネットワークインタフェースサブシステム716は、他のコンピューティング装置及びネットワークへのインタフェースを提供する。ネットワークインタフェースサブシステム716は、幾つかの実施形態では、コンピューティング装置700からの他のシステムからデータを受信し及びそれへデータを送信するインタフェースとして機能する。幾つかの実施形態では、バスサブシステム704は、詳細事項、検索語、等のようなデータを通信するために利用される。
【0095】
幾つかの実施形態では、ユーザインタフェース入力装置712は、キーボード、統合型マウス、トラックボール、タッチパッド、又はグラフィックタブレットのような指示装置、スキャナ、バーコードスキャナ、ディスプレイに組み込まれたタッチスクリーン、音声認識システム、マイクロフォンのようなオーディオ入力装置、及び他の種類の入力装置のような、1つ以上のユーザ入力装置を含む。通常、用語「入力装置」の使用は、コンピューティング装置700に情報を入力する全ての可能な種類の装置及びメカニズムを含むことを意図する。幾つかの実施形態では、1つ以上のユーザインタフェース出力装置714は、ディスプレイサブシステム、プリンタ、又はオーディオ出力装置のような非視覚的ディスプレイ、等を含む。幾つかの実施形態では、ディスプレイサブシステムは、陰極線管(CRT)、液晶ディスプレイ(LCD)、発光ダイオード(LED)ディスプレイ、又はプロジェクションのような平面装置、又は他のディスプレイ装置を含む。通常、用語「出力装置」の使用は、コンピューティング装置700から情報を出力する全ての可能な種類の装置及びメカニズムを含むことを意図する。1つ以上のユーザインタフェース出力装置714は、例えば、ユーザインタフェースを提示して、ここに記載したプロセス及び変形を実行するアプリケーションとのユーザ相互作用が適切であるとき、そのような相互作用を実現するために使用できる。
【0096】
幾つかの実施形態では、記憶サブシステム706は、本開示の少なくとも1つの実施形態の機能を提供する基本プログラミング及びデータ構造を記憶するコンピュータ可読記憶媒体を提供する。アプリケーション(プログラム、コードモジュール、命令)は、1つ以上のプロセッサにより実行されると、幾つかの実施形態では、本開示の1つ以上の実施形態の機能を提供し、実施形態では、記憶サブシステム706に格納される。これらのアプリケーションモジュールまたは命令は、1つ以上のプロセッサ702により実行できる。種々の実施形態では、記憶サブシステム706は、更に、本開示に従い使用されるデータを格納するレポジトリを提供する。幾つかの実施形態では、記憶サブシステム706は、メモリサブシステム708及びファイル/ディスク記憶サブシステム710を含む。
【0097】
実施形態では、メモリサブシステム708は、プログラム実行中に命令及びデータを記憶するための主ランダムアクセスメモリ(RAM)718、及び/又は固定命令が格納できる読み出し専用メモリ(ROM)720のような多数のメモリを含む。幾つかの実施形態では、ファイル/ディスク記憶サブシステム710は、プログラム及びデータファイルのための非一時的持続性(不揮発性)記憶を提供し、ハードディスクドライブ、関連する取り外し可能媒体と一緒のフロッピディスクドライブ、コンパクトディスク読み出し専用メモリ(CD-ROM)ドライブ、光ドライブ、取り外し可能媒体カートリッジ、又は他の同様の記憶媒体を含み得る。
【0098】
幾つかの実施形態では、コンピューティング装置700は、少なくとも1つのローカルクロック724を有する。ローカルクロック724は、幾つかの実施形態では、特定の開始日から刻んだ時の数を表すカウンタを表し、幾つかの実施形態では、コンピューティング装置700の内部に配置される。種々の実施形態では、ローカルクロック724は、コンピューティング装置700及びそれに含まれるサブシステムのためのプロセッサ内のデータ転送を特定のクロックバルスで同期化するために使用され、コンピューティング装置700とデータセンタ内の他のシステムとの間の動機動作を調整するために使用できる。別の実施形態では、ローカルクロックは、プログラム可能な内部タイマである。
コンピューティング装置700は、ポータブルコンピュータ装置、タブレットコンピュータ、ワークステーション、又は後述する任意の他の装置を含む種々のタイプのうちの任意のものであってよい。さらに、コンピューティング装置700は、幾つかの実施形態では、1つ以上のポート(例えば、USB、ヘッドフォンジャック、光コネクタ、等)を通じてコンピューティング装置700に接続可能な別の装置を含み得る。実施形態では、このような装置は、光ファイバコネクタを受けるよう構成されるポートを含む。したがって、幾つかの実施形態では、この装置は、光信号を、処理のために装置を接続するポートを通じてコンピューティング装置700に送信される電気信号に変換するよう構成される。コンピュータ及びネットワークの絶えず変化する特性により、
図7に示したコンピューティング装置700の説明は、装置の好適な実施形態を説明する目的の特定の例としてのみ意図される。
図7に示したシステムより多くの又は少ないコンポーネントを有する多くの他の構成が可能である。
【0099】
明細書及び図面は、したがって、限定的意味ではなく説明的であると考えられるべきである。しかしながら、これらへの種々の変更及び変化が、特許請求の範囲に記載された発明の範囲から逸脱することなく行われてよいことが明らかである。同様に、他の変形は、本開示の範囲内にある。したがって、開示の技術は種々の変更及び代替構成を受けるが、その特定の図示の実施形態が図示され、詳細に上述された。しかしながら、本発明を開示の1又は複数の特定の形式に限定する意図はなく、反対に、添付の特許請求の範囲に定められるように、本発明の範囲に包含される全ての変更、代替構成、均等物をカバーすることを意図する。
【0100】
開示の実施形態を記載する文脈における用語「a」及び「an」、「the」及び同様の参照は(特に以下の特許請求の範囲の文脈では)、文脈上特に示され又は明確に否定されない限り、単数及び複数の両方をカバーすることを意図する。用語「有する」、「含む」(comprising、having、including、containing)等は、特に断りのない限り、制限のない用語(つまり、「含むがそれに限定されない」を意味する)と考えられるべきである。用語「接続される(connected)」は、未修飾であり物理的接続を参照するとき、仲介物がない場合でも、部分的または全体的に含まれる、付加される、又は一緒に結合されると考えられるべきである。本開示における値の範囲の記載は、特に断りのない限り、単に、その範囲に含まれる各々の個別の値を個々に参照することの簡略表記法として機能し、各別個の値は個々に記載されたように本明細書に組み込まれると考えられるべきである。用語「セット又は集合」(例えば、「アイテムのセット」)又は「サブセット又は部分集合」の使用は、特に断りのない限り又は文脈上否定されない限り、1つ以上の構成要素を含む空ではない集合であると考えられるべきである。さらに、特に断りのない限り又は文脈上否定されない限り、対応するセットの用語「サブセット」は、必ずしも、対応するセットの真部分集合を示さず、サブセット及び対応するセットは等しくてもよい。
【0101】
結合的言語、例えば「A、B、及びCのうちの少なくとも1つ」又は「A、B及びCのうちの少なくとも1つ」は、特に断りのない限り又は文脈上特に明確に否定されない限り、通常、アイテム、用語、等が、A又はB又はCのいずれか、又はA及びB及びCのセットのうちの空でない任意のサブセットであり得ることを表すために使用されると文脈上理解される。例えば、3人のメンバを有するセットの説明のための例では、結合的フレーズ「A、B、及びCのうちの少なくとも1つ」又は「A、B及びCのうちの少なくとも1つ」は、以下のセット{A}、{B}、{C}、{A,B}、{A,C}、{B,C}、{A,B,C}のいずれかを表す。したがって、このような結合的言語は、通常、特定の実施形態が少なくとも1つのA、少なくとも1つのB、及び少なくとも1つのCがそれぞれ存在することを必要とすることを意味することを意図しない。
【0102】
記載のプロセスの動作は、特に断りのない限り又は文脈上明確に否定されない限り、任意の適切な順序で実行できる。記載のプロセス(又は変形及び/又はそれらの結合)は、実行可能命令により構成された1つ以上のコンピュータシステムの制御下で実行でき、ハードウェア又はその組み合わせにより1つ以上のプロセッサ上で連携して実行するコード(例えば、実行可能命令、1つ以上のコンピュータプログラム又は1つ以上のアプリケーション)として実装できる。幾つかの実施形態では、コードは、コンピュータ可読記憶媒体に、例えば1つ以上のプロセッサにより実行可能な複数の命令を有するコンピュータプログラムの形式で格納できる。幾つかの実施形態では、コンピュータ可読記憶媒体は、非一時的である。
【0103】
任意の及び全ての例の使用、又は提供された例示的な言語(例えば「のような(such as)」)は、単に、本発明の実施形態をより良好に解明することを意図しており、特に断りのない限り本発明の範囲に限定を課すものではない。明細書中のいかなる言語も、任意の請求されない要素を本発明の実施に必須であることを示すと考えられるべきではない。
【0104】
本発明を実施するために発明者に知られたベストモードを含む本開示の実施形態が記載された。種々のこれらの実施形態は、前述の説明を読むことにより、当業者に明らかになる。発明者は、当業者がこのような変形を適切に利用することを期待し、発明者は、本開示の実施形態が特に記載されたものと異なる方法で実施されることを意図する。したがって、本開示の範囲は、適用される法により許容されるように、添付の特許請求の範囲に記載された主題の全ての変更及び均等物を含む。さらに、それらの全ての可能な変形における上述の要素の任意の組み合わせは、特に断りのない限り又は文脈上特に明確に否定されない限り、本開示の範囲により包含される。
【0105】
本願明細書に引用される公報、特許出願、特許、を含むあらゆる参考文献は、参照により各文献が個別に且つ具体的に参照により組み込まれると示され且つ本願明細書にその全体が記載されたのと同じようにここに組み込まれる。これは、英国特許出願番号GB1719998.5,GB1718505.9,GB1720768.9を含む。
【0106】
上述の実施形態は、本発明を限定するのではなく、説明すること、及び当業者は添付の特許請求の範囲により定められる本発明の範囲から逸脱することなく多くの代替的実施形態を考案できることに留意すべきである。特許請求の範囲において、括弧内の任意の参照符号は、請求項を限定することを意図しない。用語「有する」及び「含む」(comprising、comprises)等は、任意の請求項又は明細書全体に列挙されたもの以外の要素またはステップの存在を排除しない。本願明細書では、「有する」は「有する又は構成される」を意味し、「含む」は「含む又は構成される」を意味する。要素の単数の参照は、該要素の複数の参照を排除しない。逆も同様である。本発明は、幾つかの別個の要素を含むハードウェアにより、及び適切にプログラムされたコンピュータにより、実装できる。幾つかの手段を列挙する装置クレームでは、これらの手段のうちの幾つかは、1つの同じハードウェアアイテムにより具現化できる。単に特定の手段が相互に異なる従属請求項に記載されるという事実は、これらの手段の組み合わせが有利に使用されないことを示さない。
【符号の説明】
【0107】
102 演算回路
104 シリアル化回路
【外国語明細書】