(57)【要約】【課題】量子回路をシミュレートする。【解決手段】コンピュータ実装方法は、量子回路のデジタル記述を受信することと、量子回路のデジタル記述を複数の量子サブ回路へと分割することであって、複数の量子サブ回路の各量子サブ回路は１つまたは複数の量子ゲートを備える、分割することと、複数の量子サブ回路についてサブ回路依存度を決定することと、サブ回路依存度に従って複数の量子サブ回路をシミュレートして、複数の量子サブ回路の各量子サブ回路についてシミュレーション結果を生成することと、を含み、複数の量子サブ回路のうちの第１の量子サブ回路および第２の量子サブ回路は、共通のキュービットに適用される１つまたは複数のゲートを各々含み、第１の量子サブ回路および第２の量子サブ回路は、もつれ状態のテンソル・インデックスを使用して互いに独立してシミュレートされる。対応するコンピュータ・システムおよびコンピュータ・プログラム製品もまた、本明細書において開示される。【選択図】図１
2020534603.tif 000002
【特許請求の範囲】
【請求項１】
１つまたは複数のプロセッサによって実行される、複数の量子ゲートを備える量子回路をシミュレートするための方法であって、
前記量子回路のデジタル記述を受信することと、
前記量子回路の前記デジタル記述を複数の量子サブ回路へと分割することであって、前記複数の量子サブ回路の各量子サブ回路は１つまたは複数の量子ゲートを備える、前記分割することと、
前記複数の量子サブ回路についてサブ回路依存度を決定することと、
前記サブ回路依存度に従って前記複数の量子サブ回路をシミュレートして、前記複数の量子サブ回路の各量子サブ回路についてシミュレーション結果を生成することと、を含み、
前記複数の量子サブ回路のうちの第１の量子サブ回路および第２の量子サブ回路は、共通のキュービットに適用される１つまたは複数のゲートを各々含み、
前記第１の量子サブ回路および前記第２の量子サブ回路は、もつれ状態のテンソル・インデックスを使用して互いに独立してシミュレートされる、方法。
【請求項２】
前記第１の量子サブ回路中の前記ゲートの全てが、前記第２の量子サブ回路中の前記ゲートの全てに厳密に先行するまたは厳密に後続する訳ではない、請求項１に記載の方法。
【請求項３】
前記第１の量子サブ回路および前記第２の量子サブ回路は重なり合うゲート段を含む、請求項１に記載の方法。
【請求項４】
２つのサブ回路を橋渡しするもつれ状態のゲートは、単一キュービットのゲートともつれ状態の対角ユニタリ・ゲートの等価な組合せで置き換えられる、請求項１に記載の方法。
【請求項５】
前記量子回路を、前記量子回路の１つまたは複数のより後期の段にもつれ状態のゲートが配されるように変換することを更に含む、請求項１に記載の方法。
【請求項６】
前記量子回路を、前記量子回路の１つまたは複数の最終段に対角ユニタリ量子ゲートが配されるように変換することを更に含む、請求項１に記載の方法。
【請求項７】
前記複数の量子サブ回路のうちの１つまたは複数の量子サブ回路に関する結果を使用して、前記量子回路の前記最終段をシミュレートすることを更に含む、請求項１に記載の方法。
【請求項８】
サブ回路は入力−出力の順序でＦＯＩＬ方式でシミュレートされる、請求項１に記載の方法。
【請求項９】
コンピュータ・プログラム製品であって、
１つまたは複数のコンピュータ可読記憶媒体と、前記１つまたは複数のコンピュータ可読記憶媒体に保存されているプログラム命令と、を含み、前記プログラム命令は、
量子回路のデジタル記述を受信し、
前記量子回路の前記デジタル記述を複数の量子サブ回路へと分割し、前記複数の量子サブ回路の各量子サブ回路は１つまたは複数の量子ゲートを備え、
前記複数の量子サブ回路についてサブ回路依存度を決定し、
前記サブ回路依存度に従って前記複数の量子サブ回路をシミュレートして、前記複数の量子サブ回路の各量子サブ回路についてシミュレーション結果を生成する
ための命令を含み、
前記複数の量子サブ回路のうちの第１の量子サブ回路および第２の量子サブ回路は、共通のキュービットに適用される１つまたは複数のゲートを各々含み、
前記第１の量子サブ回路および前記第２の量子サブ回路は、もつれ状態のテンソル・インデックスを使用して互いに独立してシミュレートされる、コンピュータ・プログラム製品。
【請求項１０】
１つまたは複数のプロセッサによって実行される、複数の量子ゲートを備える量子回路をシミュレートするための方法であって、
複数の段を含む前記量子回路のデジタル記述を受信することと、
初期段の各キュービットに対してサブ回路を作成して複数のサブ回路を生成することと、
接続される橋渡ししないゲートを、接続される橋渡ししないゲートがそれ以上利用できなくなるまで、前記複数の段のうちの１つまたは複数の後続の段から前記複数のサブ回路へと反復的に追加することと、
前記複数のサブ回路のうちの２つ以上のサブ回路に接続されている、橋渡しするゲートを選択することと、
前記２つ以上のサブ回路をもつれ状態にするかどうかを決定することと、
前記２つ以上のサブ回路をもつれ状態にするよう決定することに応答して、前記橋渡しするゲートを前記２つ以上のサブ回路のうちの一方にのみ追加することと、を含む、方法。
【請求項１１】
前記２つ以上のサブ回路をもつれ状態にしないよう決定することに応答して、新しいサブ回路を作成し、前記橋渡しするゲートを前記新しいサブ回路に割り当てることを更に含む、請求項１０に記載の方法。
【請求項１２】
前記新しいサブ回路を前記複数のサブ回路に追加することを更に含む、請求項１０に記載の方法。
【請求項１３】
前記２つ以上のサブ回路を閉じる、請求項１０に記載の方法。
【請求項１４】
全てのゲートがサブ回路に割り当てられたかどうかを判定することを更に含む、請求項１０に記載の方法。
【請求項１５】
前記複数のサブ回路についてサブ回路依存度を決定することを更に含む、請求項１０に記載の方法。
【請求項１６】
前記サブ回路依存度に従って前記量子回路を実行することを更に含む、請求項１５に記載の方法。
【請求項１７】
コンピュータ・プログラム製品であって、
１つまたは複数のコンピュータ可読記憶媒体と、前記１つまたは複数のコンピュータ可読記憶媒体に保存されているプログラム命令と、を含み、前記プログラム命令は、
複数の段を含む量子回路のデジタル記述を受信し、
初期段の各キュービットに対してサブ回路を作成して複数のサブ回路を生成し、
接続される橋渡ししないゲートを、接続される橋渡ししないゲートがそれ以上利用できなくなるまで、前記複数の段のうちの１つまたは複数の後続の段から前記複数のサブ回路へと反復的に追加し、
前記複数のサブ回路のうちの２つ以上のサブ回路に接続されている、橋渡しするゲートを選択し、
前記２つ以上のサブ回路をもつれ状態にするかどうかを決定し、
前記２つ以上のサブ回路をもつれ状態にするよう決定することに応答して、前記橋渡しするゲートを前記２つ以上のサブ回路のうちの一方にのみ追加する
ための命令を含む、コンピュータ・プログラム製品。
【請求項１８】
１つまたは複数のプロセッサによって実行される、複数の量子ゲートを備える量子回路をシミュレートするための方法であって、
量子ゲートおよび対応するキュービットを含む量子サブ回路の組のデジタル記述を受信することと、
各キュービットにおよび非対角ユニタリ・ゲートごとの出力に、個別のテンソル・インデックスを割り当てることと、
テンソル・インデックス変数を各対角ユニタリ・ゲートの入力から出力へと伝播することと、
前記割り当てられたテンソル・インデックスを使用して各量子サブ回路を実行することと、を含む、方法。
【請求項１９】
各量子サブ回路を実行することは、前記量子サブ回路中の各ゲートについてテンソルの積を構成することを含む、請求項１８に記載の方法。
【請求項２０】
各量子サブ回路を実行することは、前記割り当てられたテンソル・インデックスを使用して前記テンソルの積を演算することを含む、請求項１９に記載の方法。
【請求項２１】
各量子サブ回路を実行することは、前記量子サブ回路の内部のテンソル・インデックスを合計することを含む、請求項１８に記載の方法。
【請求項２２】
前記量子サブ回路の組についてサブ回路依存度を決定することを更に含む、請求項１８に記載の方法。
【請求項２３】
前記サブ回路依存度に従って前記量子回路を実行することを更に含む、請求項２１に記載の方法。
【請求項２４】
コンピュータ・プログラム製品であって、
１つまたは複数のコンピュータ可読記憶媒体と、前記１つまたは複数のコンピュータ可読記憶媒体に保存されているプログラム命令と、を含み、前記プログラム命令は、
量子ゲートおよび対応するキュービットを含む量子サブ回路の組のデジタル記述を受信し、
各キュービットにおよび非対角ユニタリ・ゲートごとの出力に、個別のテンソル・インデックスを割り当て、
テンソル・インデックス変数を各対角ユニタリ・ゲートの入力から出力へと伝播し、
前記割り当てられたテンソル・インデックスを使用して各量子サブ回路を実行する
ための命令を含む、コンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に量子回路に関し、より具体的には量子回路のシミュレートに関する。
【背景技術】
【０００２】
量子回路は、重ね合わせおよびイネーブルメント（ｅｎａｂｌｅｍｅｎｔ）などの量子力学的現象を直接利用して、情報を処理する。例えば、量子回路は、様々な入力に論理関数を適用する量子ゲートを備え得る。確定的な状態（例えば０および１）に限定されているデジタル論理回路とは対照的に、各回路素子に対して、量子回路は、（重ね合わせによって）複数の状態を同時に表現および処理できる。この結果、量子演算は、いくつかの問題を従来の演算よりもはるかに速く解くことのできる場合があり、また従来の演算では現状複雑過ぎる問題を解くことのできる場合がある。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
量子演算は有望ではあるが、量子回路の構築は困難であり、多くの費用がかかり、スケーリングおよび量子デコヒーレンスなどの様々な課題を抱えている。このため、市販のコンピュータを使用して比較的大規模な量子回路をシミュレートすることが必要とされている。また更に、量子デバイスが所望の量子回路を実行できる忠実度を評価するために、量子演算デバイスの実際の出力を、実装されている量子回路のシミュレーションによって予測した理想的な挙動と比較することも必要である。
【課題を解決するための手段】
【０００４】
本明細書に開示する実施形態の一態様では、１つまたは複数のプロセッサによって実行される、複数の量子ゲートを備える量子回路をシミュレートするための方法は、量子回路のデジタル記述を受信することと、量子回路のデジタル記述を複数の量子サブ回路へと分割することであって、複数の量子サブ回路の各量子サブ回路は１つまたは複数の量子ゲートを備える、分割することと、複数の量子サブ回路についてサブ回路依存度を決定することと、サブ回路依存度に従って複数の量子サブ回路をシミュレートして、複数の量子サブ回路の各量子サブ回路についてシミュレーション結果を生成することと、を含み、複数の量子サブ回路のうちの第１の量子サブ回路および第２の量子サブ回路は、共通のキュービットに適用される１つまたは複数のゲートを各々含み、第１の量子サブ回路および第２の量子サブ回路は、もつれ状態のテンソル・インデックスを使用して互いに独立してシミュレートされ、対応するコンピュータ・プログラム製品もまた本明細書において開示される。
【０００５】
本明細書に開示する実施形態の一態様では、１つまたは複数のプロセッサによって実行される、複数の量子ゲートを備える量子回路をシミュレートするための方法であって、複数の段を含む前記量子回路のデジタル記述を受信することと、初期段の各キュービットに対してサブ回路を作成して複数のサブ回路を生成することと、接続される橋渡ししないゲート（ｎｏｎ−ｂｒｉｄｇｉｎｇ  ｇａｔｅ）を、接続される橋渡ししないゲートがそれ以上利用できなくなるまで、複数の段のうちの１つまたは複数の後続の段から複数のサブ回路へと反復的に追加することと、複数のサブ回路のうちの２つ以上のサブ回路に接続されている、橋渡しするゲート（ｂｒｉｄｇｉｎｇ  ｇａｔｅ）を選択することと、２つ以上のサブ回路をもつれ状態にするかどうかを決定することと、２つ以上のサブ回路をもつれ状態にするよう決定することに応答して、橋渡しするゲートを２つ以上のサブ回路のうちの一方にのみ追加すること。対応するコンピュータ・プログラム製品もまた本明細書において開示される。
【０００６】
本明細書に開示する実施形態の一態様では、１つまたは複数のプロセッサによって実行される、複数の量子ゲートを備える量子回路をシミュレートするための方法は、量子ゲートおよび対応するキュービットを含む量子サブ回路の組のデジタル記述を受信することと、各キュービットにおよび非対角ユニタリ・ゲートごとの出力に、個別のテンソル・インデックスを割り当てることと、テンソル・インデックス変数を各対角ユニタリ・ゲートの入力から出力へと伝播することと、割り当てられたテンソル・インデックスを使用して各量子サブ回路を実行することと、を含む。対応するコンピュータ・プログラム製品もまた本明細書において開示される。
【図面の簡単な説明】
【０００７】
【図１】本発明の実施形態の少なくとも１つに係る量子状態の一例を記述する図および関連する式である。
【図２】本発明の実施形態の少なくとも１つに係るキュービットに対応する基底ベクトルの一例を記述する式の組である。
【図３】本発明の少なくとも１つの実施形態に係る量子系のテンソル表現の２つの例を記述する式の組である。
【図４】本発明の実施形態の少なくとも１つに係る量子ゲートの様々な例を記述した図式的なシンボルの組である。
【図５】図４に対応するテンソルの組の表である。
【図６】現在利用可能な演算システム上ではシミュレート不可能であると従来想定されている、大きな量子回路に対応する実行プランである。
【図７】本発明の少なくとも１つの実施形態に係る、本明細書において処理の例として使用される量子回路の回路図および対応するテキスト・ベースの論理記述である。
【図８】本発明の少なくとも１つの実施形態に係る量子回路シミュレーション方法の一例を記述したフローチャートである。
【図９】図４、５、および６に記述されている様々な量子ゲートをシミュレートすることと関連付けられるテンソル式およびリソース・コストを記述したテキスト図である。
【図１０】図４、５、および６に記述されている様々な量子ゲートをシミュレートすることと関連付けられるテンソル式およびリソース・コストを記述したテキスト図である。
【図１１】図４、５、および６に記述されている様々な量子ゲートをシミュレートすることと関連付けられるテンソル式およびリソース・コストを記述したテキスト図である。
【図１２】本発明の実施形態の少なくとも１つに係る、量子回路の１つの特定の例をシミュレートするのに必要な演算リソースに分割が及ぼす効果を記述した回路図および式の図である。
【図１３】本発明の実施形態の少なくとも１つに係る、量子回路の１つの特定の例をシミュレートするのに必要な演算リソースに分割が及ぼす効果を記述した回路図および式の図である。
【図１４】本発明の実施形態の少なくとも１つに係る、量子回路の１つの特定の例をシミュレートするのに必要な演算リソースに分割が及ぼす効果を記述した回路図および式の図である。
【図１５】本発明の実施形態の少なくとも１つに係る、量子回路の１つの特定の例をシミュレートするのに必要な演算リソースに分割が及ぼす効果を記述した回路図および式の図である。
【図１６】本発明の実施形態の少なくとも１つに係る、量子回路の１つの特定の例をシミュレートするのに必要な演算リソースに分割が及ぼす効果を記述した回路図および式の図である。
【図１７】本発明の少なくとも１つの実施形態に係る量子回路分割方法の一例を記述したフローチャートである。
【図１８】本発明の少なくとも１つの実施形態に係る量子回路実行方法の一例を記述したフローチャートである。
【図１９】図１８に記述されている量子回路実行方法の追加の詳細を記述したフローチャートである。
【図２０】量子回路の１つの特定の例の分割前最適化の一例を記述した回路図である。
【図２１】量子回路の１つの特定の例の分割前最適化の一例を記述した回路図である。
【図２２】量子回路の１つの特定の例の分割前最適化の一例を記述した回路図である。
【図２３】量子回路の１つの特定の例を分割および実行する４つの例を記述した回路図である。
【図２４】量子回路の１つの特定の例を分割および実行する４つの例を記述した回路図である。
【図２５】量子回路の１つの特定の例を分割および実行する４つの例を記述した回路図である。
【図２６】量子回路の１つの特定の例を分割および実行する４つの例を記述した回路図である。
【図２７】現在利用可能な演算システム上でのシミュレーションを可能にする、図６に対応する大きな量子回路のサブ回路を記述した回路分割である。
【図２８】本明細書で開示する方法のうちの１つまたは複数の実行に適した演算装置の一例を記述したブロック図である。
【発明を実施するための形態】
【０００８】
以下の用語、定義、および概念は、Ｗｉｋｉｐｅｄｉａなどの一般に利用可能なソースならびに発明者らの実用上の知見から抽出されたものであり、本発明を理解するのに−特に量子回路をシミュレートする技術の当業者でない者にとって−有用であり得る。
【０００９】
量子重ね合わせ：２つ以上の同時の刺激によって引き起こされる正味の応答（例えば回路素子における）は、各刺激が個々に引き起こしたであろう応答の和である。量子系の場合、応答は量子状態であり、これは離散状態の線形重ね合わせであり得る。重ね合わせはこの場合、量子回路が複数の状態または結果を同時に表すこと（例えば０と１の統計学的混合）を可能にする。
【００１０】
量子系：重ね合わせおよびもつれ状態などの量子効果を呈する系。
【００１１】
量子状態：量子系において（同時に）存在するまたは利用できる状態（確率）。
【００１２】
キュービット：０状態と１状態の統計学的混合を同時に表し得る、量子記憶の単位。
【００１３】
量子崩壊：量子力学的系を測定された単一の状態へと遷移させる、系の状態を測定する行為。実際の量子力学的系では、測定する行為は本質的には、値の統計学的混合から、実現される単一の値を選択する。しかしながら、シミュレートされた量子回路では、基礎となる状態情報を破壊することなく測定を行うことができる。
【００１４】
もつれ状態：量子力学的状態が互いに独立している２つの量子系の間に存在する効果。例えば、２つのキュービットの一方の状態のもつれ状態を測定することによって、もつれ状態のキュービットの他方の状態についての情報が分かることになるが、その理由はそれらの状態が統計学的に相関しているからである。
【００１５】
量子データ：（例えば、キュービットなどの量子回路素子内の）１つまたは複数の量子状態として表される情報。
【００１６】
量子ゲート：量子データに対して論理的または数学的関数を実行するための、量子回路の素子。量子ゲートの例を図４、５、および６に示す。
【００１７】
テンソル：実数値または複素数値のｋ次元アレイ、ここでｋはテンソルの階数または次数である。行列は２次のテンソルであり、ベクトルは１次のテンソルである。テンソルを使用して、量子シミュレーションにおける量子状態を表すことができる。
【００１８】
テンソルのネットワーク：相互に関連するテンソル式の組に対応する有向グラフ。テンソルのネットワークを使用して量子回路を表現することができ、この場合、グラフ中のノードは量子回路素子（例えば量子ゲート）を表すテンソルであり、グラフの辺はテンソルのインデックスとなる変数を示し得る。
【００１９】
テンソル縮約：２つ以上の相互に関連する一連のテンソルを統合して単一のテンソルにする、数学的に厳密なプロセス。テンソル縮約により、統合されるテンソルのインデックスとなる変数の関係に応じて、結果的なテンソルのサイズが倍数的に大きくなる場合もあれば、ならない場合もある。量子回路がテンソルのネットワークとして表されるとき、テンソル縮約により、１つまたは複数の辺によって接続された２つ以上のノードが統合されて、単一のノードになる。
【００２０】
本明細書で使用する場合、（例えば量子サブ回路を）「シミュレートする」および「実行する」という用語は、本明細書で開示する量子回路シミュレーション方法が（現実のものの単なる近似に過ぎない多くのシミュレーションとは対照的に）演算として有効な現実的な結果をもたらすという点で、本質的に同義である。本明細書で使用する場合、「インデックス変数」という句または同様の句は、結果的に所望のデータまたはメモリあるいはその両方の場所へのアクセスをもたらす、（当業者に知られているような）任意の種類のメモリのアドレッシングまたはインデックス付けを指す。
【００２１】
本明細書に開示する実施形態の少なくともいくつかでは、量子回路を従来想定されるよりも少ないメモリの使用でシミュレートできることが認識される。例えば、本明細書に開示する実施形態の少なくともいくつかは、Ｎキュービットを含む量子回路を表現およびシミュレートするために必要なメモリを、２Ｎ個の複素数値からこの量のごく一部にまで低減することができる。
【００２２】
具体的には、本明細書に開示する実施形態の少なくともいくつかでは、サブ回路のうちの２つ以上においてもつれ状態の量子回路素子を有することによって、量子回路をサブ回路へと分割できることが認識される。本明細書に開示する実施形態の少なくともいくつかでは更に、いくつかのサブ回路のシミュレーション結果をスライスして計算でき、そうすることによって、量子回路全体をシミュレートするために必要な作業メモリを、従来の予想に反して著しく低減できることが認識される。本発明の進歩性のある洞察のうちの１つは、これらのスライスの操作を、量子回路のシミュレーション中、シミュレーションにおいてあるキュービットに適用される残りの全ての量子ゲートが対角ユニタリ・ゲートとなるポイントに達するとすぐに、行うことができることである。そのような状況では、キュービットの０／１値に対して反復処理を行うために、ｆｏｒ−ループなどの反復構成を導入することができ、そのキュービットを含む後続のテンソル演算は、テンソルのスライスを採用しない場合の半量の作業メモリの使用で、スライスして行うことができる。
【００２３】
この明細書全体にわたる特徴、洞察、利点、または同様の言語への言及は、本明細書に開示する実施形態によって実現され得る特徴および利点の全てが、本発明のどの単一の実施形態にも存在すべきであるまたは存在していることを示唆している訳ではないことに、留意すべきである。むしろ、特徴および利点に言及する言語は、ある実施形態に関連して記載される具体的な特徴、利点、または特性が、本発明の少なくとも１つの実施形態に含まれることを意味するものと理解される。したがって、特徴、利点、および同様の言語についての考察は、この明細書全体にわたって同じ実施形態を参照している場合があるが、必ずそうである訳ではない。
【００２４】
また更に、記載される本発明の特徴、洞察、利点、および特性は、１つ以上の実施形態において任意の好適な方法で組み合わされてもよい。特定の実施形態の具体的な特徴または利点のうちの１つまたは複数が無くても本発明を実施できることを、関連技術の当業者は認識するであろう。また場合によっては、特定の実施形態において追加の特徴および利点が認識される場合があるが、それらは、本発明の全ての実施形態に存在するとは限らない場合がある。これらの特徴および利点は、以下の図面、説明、および付属の特許請求の範囲からより十分に明らかになるか、または、以下に記載するような本発明の実施によって理解されるであろう。
【００２５】
図１は、本発明の少なくとも１つの実施形態に係る量子状態の一例を描いた図および関連する式である。粒子、例えば電子は、他の粒子、例えば原子に拘束されており、量子状態と呼ばれる離散した（すなわち量子化された）振動エネルギー・レベルに制限されている。ディラック記法（ブラ−ケット記法としても知られる）では、これらの状態は｜０〉、｜１〉、｜２〉、｜３〉等として割り当てられ、ここで｜０〉は、基底状態として知られる最低エネルギー・レベルに対応する。
【００２６】
量子コンピュータは、計算を行うおよび問題を解くために、量子系の状態を操作する。通常は、２つの最低エネルギー状態のみが使用され、この結果、キュービットとして知られる演算および保存の単位が得られる。個々の電子に対する操作およびアクセスには問題があるので、量子コンピュータのキュービットは通常、超電導振動子として具現化される。例としてトランズモン・キュービットが挙げられるが、これは、非線形インダクタとして有効に機能し回路共振を促進する超電導ジョセフソン接合と、コンデンサとを組み合わせた半導体デバイスである。
【００２７】
式１１０に示すように、量子系の主要な振動状態は、ｎ次元ベクトル空間内の基底ベクトルとして表すことができる。その場合、量子系の任意の量子状態を、これらの基底ベクトルとベクトル空間における各基底次元に関する複素スカラ乗数αｉとの、線形組合せ（すなわち重ね合わせ）として表すことができる。式１２０は、測定が行われるとき量子系が主要な振動状態の１つへと崩壊し、この場合確率は、測定の直前のその振動状態についてのスカラ乗数αｉ（複素振幅または単に振幅としても知られる）の２乗の大きさに比例することを示す。
【００２８】
式１３０に示すように、特定の量子状態の時間発展は、シュレーディンガー方程式によって支配される。項Ｈ（ｔ）はハミルトニアンとして知られ、系の合計エネルギーに対応する。これは、スカラ乗数αｉの線形変換を定義する行列によって表すことができる。式１４０に示すように、シュレーディンガー方程式の解は｜ψ（ｔ）〉＝Ｕ（ｔ）｜ψ（０）〉の形態を有し、ここでＵ（ｔ）は、スカラ乗数αｉの線形変換も定義するユニタリ行列として表すことができる。ただし、ハミルトニアン行列は量子系の合計エネルギーに対応し、一方で、シュレーディンガー方程式の解中に現れるユニタリ行列は量子系の時間発展に対応する。
【００２９】
式１５０は、ユニタリ行列が、それらの逆行列がそれらの複素共役の転置行列に等しいという特性を有することを示す。この特性は、量子系の時間発展は測定が行われるまで可逆である（すなわち、成されたどのような作用も逆の作用を介して元に戻すことができる）という事実を反映している。測定は非ユニタリ変換をもたらす非可逆性の作用である。
【００３０】
図２は、本発明の実施形態の少なくとも１つに係る、キュービットに対応する基底ベクトルの一例を記述する式の組である。図２に示すように、キュービットの主要な量子状態、すなわち｜０〉および｜１〉は各々、２値の成分から成る長さ２の基底ベクトルによって表すことができ、このことは、系が排他的に一方か他方かのいずれかの主要な量子状態であることを示す。式２１０に示すように、キュービットの任意の量子状態（すなわち｜ψ〉）は、｜０〉および｜１〉の基本状態の線形結合として（すなわち、これらの基本状態のスカラ乗数によって）表すことができる。記述されている式において、｜０〉および｜１〉の基本状態に対するスカラ乗数（すなわち振幅）は、それぞれギリシャ文字のアルファ（α）およびベータ（β）である。結論として、測定されるキュービットが崩壊して｜０〉状態になる確率は｜α｜２であり、測定されるキュービットが崩壊して｜１〉状態になる確率は｜β｜２である。
【００３１】
図３は、本発明の少なくとも１つの実施形態に係る量子系のテンソル表現の２つの例を記述する式の組である。より一般的なディラック記法の代わりに、ｎキュービットを含む量子系は、ＭａｒｋｏｖおよびＳｈｉが導入したようなｎ次元のアレイ（すなわちテンソル）として表すことができる。具体的には、本明細書においてインデックスとなるｎ個の下付き文字（ｉ１  …  ｉｎ）を付されたギリシャ文字プサイ（ψ）で表されているテンソル３１０を使用して、ｎ個のキュービットの量子状態を表すことができ、この場合、崩壊したまたは測定される値が観察される確率は、｜ｉ１  …  ｉｎ〉として表される基本状態３２０と関連付けられた複素スカラ振幅ψによって決定される。量子系が崩壊するまたは測定されるとき、基本状態３２０のインデックスとなる各下付き文字（ｉ１  …  ｉｎ）は二進値である。
【００３２】
量子状態のテンソル表現とディラック表現との間の関係を、式３３０に示す。ディラック表現における量子状態は、｜０…０〉、…、｜１…１〉の基本状態の線形結合であり、この場合、対応する量子状態のテンソルの値は、この線形結合を定義する複素スカラ乗数である。式３３０中のテンソル値はしたがって、式２１０中のギリシャ文字アルファ（α）およびベータ（β）と同じ役割を果たす。
【００３３】
別の例としての量子系（すなわち量子回路）に関する完全なテンソル式を、式３４０に示す。記述されている例では、初期には量子状態ψであるｎキュービットを含む量子回路において、ｋ＜ｍであるキュービットｋおよびｍに、２キュービットのゲートが適用されている。式３４０は、初期の量子状態ψおよび２キュービットのゲートによって定義されたユニタリ線形変換に対応するテンソルｕを項として、結果的な量子状態ψ’のテンソルの値を表す。ディラック記法での等価な式はこれよりも著しく複雑であって、４次元のゲート・テンソルｕを２ｎ×２ｎ次元の行列へと拡張し、このときこの行列の行および列の適正な組合せにおいてｕの１６個の値の各々を２（ｎ−４）回複製する必要がある。ｋ＝ｍ−１でない場合、ディラック記法における等価な式は非常に煩雑なものとなるであろうが、一方でこれは、テンソル記法を使用して容易に表すことができる。
【００３４】
図４は本発明の実施形態の少なくとも１つに係る量子ゲートの様々な例を記述した図式的なシンボルの組であり、図５は対応するテンソルの組の表である。記述されている量子ゲートは、パウリ・ゲート４１０、重ね合わせゲート４２０、制御ＮＯＴゲート４３０、制御Ｚゲート４４０、および非クリフォード・ゲート４５０を含む。記述されている量子ゲートは、量子演算システムにおいて使用できるゲートの非網羅的な例である。
【００３５】
パウリ・ゲート４１０は、粒子のスピンと外部の電磁場との相互作用を考慮に入れたパウリ方程式に対応する。重ね合わせゲート４２０は、アダマール・ゲート４２０Ａと、Ｓゲート４２０ＢおよびＳ†ゲート４２０Ｃと、を含む。アダマール・ゲート４２０Ａは、｜０〉および｜１〉の主要な（排他的）基本状態を、｜０〉と｜１〉の中間にある状態、すなわち（｜０〉＋｜１〉）／√２および（｜０〉−｜１〉）／√２にそれぞれにマッピングし、この結果、｜０〉および｜１〉の基本状態について、等しい確率が得られる。Ｓゲート４２０ＢおよびＳ†ゲート４２０Ｃは、重ね合わせに９０°位相回転を加えるために使用される場合もある。
【００３６】
制御ゲートは２つ以上のキュービットに作用し、この場合、１つまたは複数のキュービットが、特定の演算の制御ビットとして作用する。制御Ｚ（ＣＺ）ゲート４４０の場合、キュービットの一方が、他方のキュービットにパウリＺ演算を適用するかどうかを決定する。ＣＺゲートの作用は、どのキュービットが制御ビットであるかにかかわらず結果が同じであるという意味において、完全に対称である。制御ＮＯＴ（ＣＮＯＴ）ゲート４３０の場合、キュービットの一方が、他方のキュービットにパウリＸ演算を適用してこの他方のキュービットをＮＯＴ化（フリップ）するかどうかを決定する。ＣＮＯＴゲート４３０およびＣＺゲート４４０はいずれも、キュービットをもつれ状態にするおよびキュービットのもつれ状態を解除するために使用することができる。ＣＮＯＴゲートと古典的に類似しているのは、可逆なＸＯＲゲートである。
【００３７】
非クリフォード・ゲートは、任意のユニタリ変換を近似するために使用される。記述されている非クリフォードＴゲート４５０Ａおよび非クリフォードＴ†ゲート４５０Ｂは、４５°の位相回転を加える。クリフォード・ゲート４１０から４４０は有限個の個別のユニタリ変換を実現させることしかできないが、ＴおよびＴ†ゲートを追加することによりこの組が無限大に拡張され、これらのゲートの適切な組合せによって、どのようなユニタリ変換も任意の正確度で近似することが可能になる。ユニバーサル量子演算はこの能力を利用する。
【００３８】
Ｚ、Ｓ、Ｓ†、ＣＺ、Ｔ、およびＴ†ゲートは対角ユニタリ・ゲートである、すなわち、これらのディラック行列表現は対角外の項が０である対角行列であることを、量子演算の当業者は認識するであろう。他方で、対角ユニタリ・ゲートのテンソル表現は、図５に示すように、これらの対角項のみを反映すればよい。
【００３９】
図６は、現在利用可能な古典的演算システム上ではシミュレート不可能であると従来想定されている、大きな量子回路に対応する実行プラン５００である。記述されているように、実行プラン５００は、中にゲートのシンボル５２０を含んだいくつかのタイル５１０を含む。各タイル５１０は段または時間ステップに対応し、ゲートのシンボル５２０は、示された段または時間ステップ中に１つまたは複数のキュービットに対して実行される関数（変換）を示す。記述されている実施形態では、実行プラン５００は、行ごとに上から下へとおよび各行内でタイルごとに左から右へと実行される。各タイルが７×７のキュービットのアレイに対応すること、および、４９キュービットの可能な全ての状態を表すために２４９個のメモリ値が必要となることを、当業者は諒解するであろう。したがって、（複素）キュービット状態情報を保存するために２つの８バイト浮動小数点値を使用する場合、記述されている実行プランのシミュレーションを従来のシミュレーション技法を用いて保証するためには、２５３バイト（８ペタバイト）のメモリが必要となる。
【００４０】
図７は、本発明の少なくとも１つの実施形態に係る、本明細書において処理の例として使用される量子回路６５０の回路図および対応するテキスト・ベースの記述である。量子回路６５０において規定されている量子ゲートは、アダマール・ゲート６６０、Ｘパウリ・ゲート６７０Ａ、Ｙパウリ・ゲート６７０Ｂ、Ｚパウリ・ゲート６７０Ｃ、およびＣＮＯＴゲート６８０を含む。記述されているテキスト・ベースの記述はＯｐｅｎＱＡＳＭの仕様に準拠しており、特定のキュービットにどのゲートが作用するかを示す。指定される関数およびゲートは、段／時間ステップの順であると想定されている。この結果、記述されているテキスト・ベースの記述は極めてコンパクトである。
【００４１】
図８は、本発明の少なくとも１つの実施形態に係る量子回路シミュレーション方法７００の一例を記述したフローチャートである。記述されているように、量子回路シミュレーション方法７００は、量子回路のデジタル記述を受信すること（７１０）と、分割前最適化を行うこと（７２０）と、量子回路をサブ回路へと分割すること（７３０）と、実行順序を決定すること（７４０）と、量子回路を実行すること（７５０）と、を含む。量子回路シミュレーション方法７００は、図２８に記述されているようなコンピュータ１５００などのコンピュータによって実行することができ、１つまたは複数の従来のコンピュータおよび関連するストレージ・デバイス上での量子回路のシミュレーションを可能にする。
【００４２】
量子回路のデジタル記述を受信すること（７１０）は、量子回路のテキスト・ベースのまたは二値式の記述を受信することを含み得る。記述は、回路に含まれる量子ゲートおよびゲート間の依存度を示すことができる。一実施形態では、デジタル記述はＯｐｅｎＱＡＳＭ仕様に準拠する。
【００４３】
分割前最適化を行うこと（７２０）は、量子回路を実行するために必要なリソースを低減するゲート置換（例えば回路書き換え）を行うことを含み得る。回路書き換えは、量子回路の最終段において、非対角ユニタリ・ゲートを回路の終端から内向きに何キュービット分かにわたる対角ユニタリ・ゲートの連鎖で置き換えるゲート置換を行うことも含み得る。そのような回路書き換えにより、回路のより早期にテンソルのスライスを行って、そのような書き換えを行わない場合よりもメモリ必要量を更に低減することが可能になる。回路書き換えは、複数キュービットのゲートを回路のより後期へとシフトさせるゲート置換も含み得る。そのような回路書き換えにより、メモリ必要量の増大を回路のより後期まで留保できるとともに、テンソルの追加のスライスを適用する機会を増やして、量子回路をシミュレートするために必要なメモリ必要量をより一層低減することができる。
【００４４】
量子回路をサブ回路へと分割すること（７３０）は、いくつかの可能な分割のリソース・コストを（ヒューリスティックにまたは網羅的に）推定することと、リソース・コストが最低である分割を選択することと、を含み得る。いくつかの実施形態では、推定することおよび選択することは再帰的に行われる。特定の実施形態では、各入力キュービットは別々のサブ回路に割り当てられ、これらのサブ回路はこれらが接続される後続の段のゲートを消費しようと競合する。いくつかの実施形態では、（少なくとも初期において）量子回路を単一キュービットのサブ回路および複数キュービットのサブ回路へと分割するために、ゲート依存度グラフが使用される。
【００４５】
実行順序を決定すること（７４０）は、依存度情報を使用してサブ回路についての実行順序を決定することを含み得る。いくつかの実施形態では、実行順序は、図６と類似の実行プランを作成すること、およびサブ回路の各々中の最初のゲートの段または時間ステップを比較することによって、決定される。
【００４６】
量子回路を実行すること（７５０）は、各サブ回路を実行順序に従って実行することを含み得る。いくつかの実施形態では、複数のプロセッサが使用され、利用可能な各プロセッサは、次の未実行のサブ回路を実行制御部に要求する。他の実施形態では、各サブ回路についてプロセスが生成され、プロセスの優先度レベルが、より早期の段のサブ回路により高い優先度レベルが割り当てられるように、実行順序とは逆に割り当てられる。いくつかの実施形態では、サブ回路のシミュレーションが、複数のプロセッサにわたって並行して分散する様式で、例えば高効率の演算技法を用いて行われる。いくつかの実施形態では、グラフィック処理ユニット上でシミュレーション計算が行われる。
【００４７】
図９〜１１は、図４、５、および６に記述されている様々な量子ゲートをシミュレートすることと関連付けられるテンソル式およびリソース・コストを記述したテキスト図である。示されているように、記述されているテンソル式に従うキュービットの更新と関連付けられるリソース・コストは、量子系における状態情報を保持するために使用される特定の関数ならびにキュービットの数に依存する。例えば、ｎキュービットの量子系において２つのキュービットに適用されるアダマール・ゲートは、２（ｎ＋１）回の複素乗算、２ｎ回の複素加算、および２（ｎ＋４）バイトのメモリを必要とすることになる。対照的に、制御Ｚゲートは同じバイト数のメモリを必要とするが、必要とする複素乗算の回数は半分、複素加算は０回である。この同じ特性は、Ｚ、Ｓ、Ｓ†、ＣＺ、Ｔ、およびＴ†ゲートを含め、全ての対角ユニタリ・ゲートに対して当てはまる。０のまたは１の乗算は回避できることおよび−１の乗算は単純な符号の変化であることを利用するような専用のコードを各ゲートに実装することによって、ゲートあたりの演算の数の更なる削減を達成できる。同様に、複素数と純実数の係数または純虚数の係数との乗算では、通常の４回の乗算および２回の加算の代わりに、必要なのは２回の浮動小数点乗算だけで、加算は必要としない。いくつかの実施形態では、本発明は、量子回路シミュレーション・プロセスの選択肢を比較するために、リソース・コストの知識を活用する。
【００４８】
図１２〜１６は、本発明の実施形態の少なくとも１つに係る、量子回路の１つの特定の例をシミュレートするのに必要な演算リソースに分割が及ぼす効果を記述した回路図および式の図である。
【００４９】
図１２には、量子回路をシミュレートするための従来の方法を反映した回路区分けが描かれており、この場合、回路中の全てのキュービットの量子状態を保持するデータ構造が最初に構成および初期化され、次いでこのデータ構造が、入力−出力の順序で実行される各ゲートの効果をシミュレートすることによって更新される。この従来の方法は、示されているような、キュービットの初期状態があるサブ回路中に一緒に入れられゲートが第２のサブ回路中に一緒に入れられる回路分割に対応する。図１２に記述されている式は、この手法を用いて行われる計算を反映している。初期状態のテンソル
【数１】
2020534603.tif 000003
が最初に構成および初期化され、このとき初期化においてクロネッカー・デルタのテンソル
【数２】
2020534603.tif 000004
を採用するが、これは以下のディラックの量子基底状態｜０〉と等価なテンソルである。
【００５０】
【数３】
2020534603.tif 000005
次いで最終状態のテンソルψが、初期状態テンソル
【数４】
2020534603.tif 000006
から、図９〜１１に示す式を入力−出力の順序で適用することによって計算される。
【００５１】
図１３には従来技術で知られている多少洗練させた様式の回路分割が描かれており、この場合キュービットｑ［０］およびｑ［１］は、両方のキュービットに適用しなければならない複数キュービットのゲートが現れるまで、可能なところまで互いに独立してシミュレートされる。このような状況下での従来の手法は、次いでｑ［０］およびｑ［１］の独立したシミュレーションの結果を組み合わせ、最終的に残りのゲートを結果的な組み合わされた状態に適用して最終的な量子状態を得るものである。図１３に記述されている式は、このシミュレーション手法に精確に対応している。
【００５２】
図１４、１５、および１６は本発明の進歩性を備えた洞察を示しているが、これは、量子ゲートのテンソル表現を採用することにより、代数学の法則によって、ゲートの組をサブ回路へと恣意的に分割すること、各サブ回路をシミュレートすること、および、これらの結果を組み合わせて、回路の最終的な量子状態の数学的に同一の計算を行うことが可能になる、というものである。図１４および１５は２つの分割を示し、この場合、キュービットｑ［０］およびｑ［１］に対するゲートの効果が最初に互いに独立してシミュレートされ、次いでそれらの結果が組み合わされる。図１４では、ＣＮＯＴゲート−両方のキュービットに適用されこのことによりそれらをもつれ状態にする−のシミュレーションがキュービットｑ［０］のシミュレーションに対応する上側のサブ回路に割り当てられ、一方、図１５では、ＣＮＯＴゲートは下側のサブ回路に割り当てられる。
【００５３】
現在まで、キュービットがＣＮＯＴゲートなどの複数キュービットのゲートの適用を介して一度もつれ状態となると、そのもつれ状態のキュービットは一緒にシミュレートされなければならない、というのが、量子回路シミュレーションにおける従来の知見であった。別の言い方をすれば、従来の知見では、２つのサブ回路が同じキュービットに適用されるゲートを含む場合に、特にこれら２つのサブ回路がその実行プランにおいて時間的に重なり合う場合（すなわち、２つのサブ回路が重なり合う実行段を有する場合）に−これは一方のサブ回路中のゲートの全てが他方のサブ回路中のゲートの全てに厳密に先行する訳でもまた厳密に後続する訳でもなく、代わりに全体としての回路内で２つのサブ回路のゲートの配列が重なり合うことを意味する−、２つのサブ回路を互いに独立してシミュレートすることができない、と考えられている。それにも関わらず、図１４および１５は逆のことを示している−図１４および１５に示す式は、従来の知見に一見反してはいるものの、互いに関してならびに図１２および１３に示す式に関して、数学的に同一の結果をもたらす。
【００５４】
このようにシミュレーションを行うことを可能にする、実行可能性をもたらす洞察は、図１５に示すようなもつれ状態のインデックスという発想である。もつれ状態のインデックスは、２つの個別のサブ回路のゲート・テンソルの間で共有されるテンソル・インデックス（例えば変数）である。図１５では、ｂおよびｃがもつれ状態のインデックスである。図１４では、ｅおよびｆがもつれ状態のインデックスである。これらのもつれ状態のインデックスは、同じキュービットに適用されるゲートを含むサブ回路を互いに独立してシミュレートすることと、それらの結果を数学的に適正な様式で組み合わせることとを可能にするために必要な、数学的なブックキーピングを実現する。
【００５５】
原理的には、図１６に示すように、この洞察を用いて、量子回路中のゲートを恣意的に分割することができる。ただし、本発明の好ましい実施形態では、サブ回路は、シミュレーションの全体についてリソース・コスト正味の低減を達成するという目標の下で構成される。
【００５６】
図１７は、本発明の少なくとも１つの実施形態に係る量子回路分割方法１０００の一例を記述したフローチャートである。記述されているように、量子回路分割方法１０００は、初期段の各キュービットに対してサブ回路を作成すること（１０１０）と、後続の段のゲートをサブ回路に追加すること（１０２０）と、全てのゲートが割り当てられたかどうかを決定すること（１０３０）と、実行順序を決定すること（１０４０）と、橋渡しするゲートを選択すること（１０５０）と、橋渡しされたサブ回路をもつれ状態にするかどうかを決定すること（１０６０）と、橋渡しされたサブ回路を閉じること（１０７０）または橋渡しするゲートをもつれ状態のサブ回路のうちの１つに追加すること（１０８０）と、を含む。量子回路分割方法１０００は、少なくとも図８に示す分割操作７３０の一例であり、コンピュータ、例えば図２８に記述されているコンピュータ１５００によって、実行することができる。量子回路分割方法１０００により、従来のコンピュータおよび関連する記憶装置を使用した、量子回路をシミュレートするために必要なリソースを低減または最小化できる様式での量子回路の分割が可能になる。
【００５７】
初期段の各キュービットに対してサブ回路を作成すること（１０１０）は、（少なくとも初期において）量子回路が必要とするキュービットの数を決定することと、量子回路が必要とするキュービットの各々に対してサブ回路を定義するためにデータ構造を初期化することと、を含み得る。後続の段のゲートをサブ回路に追加すること（１０２０）は、各サブ回路に、現時点でサブ回路に割り当てられているキュービットからの入力しか必要としない未割り当ての次段のゲートを追加することを含み得る。この追加するステップはまた、サブ回路に割り当てられているキュービットについての残りの全ての未割り当てのゲートが対角ユニタリ・ゲートであるかどうかを判定することと、そうである場合に、そのサブ回路を閉じ、閉じられたサブ回路と同じ割り当て済みのキュービットを有する新しいサブ回路を作成することと、この新しいサブ回路を、残りの全ての未割り当てのゲートが対角ユニタリ・ゲートである割り当て済みのキュービットをスライスする目的で作成されているものとしてマークすることと、を含み得る。サブ回路を閉じることは、そのサブ回路への他のゲートの追加を防止するために、そのサブ回路を完了したものとしてマークすることを含み得る。
【００５８】
全てのゲートが割り当てられたかどうかを決定すること（１０３０）は、未割り当てのゲートの計数または何らかの他の指標が、全てのゲートがサブ回路に割り当てられたことを示しているかどうかを判定することを含み得る。実行順序を決定すること（１０４０）は、図８と関連して記載されている決定演算７４０を行うことを含み得る。
【００５９】
橋渡しするゲートを選択すること（１０５０）は、現時点でサブ回路に割り当てられている少なくとも１つのキュービットおよび現時点でサブ回路に割り当てられていない１つまたは複数のキュービットからの入力を必要とする、未割り当ての次段のゲートを選択することを含み得る。言い換えれば、橋渡しするゲートは、現時点で作成されている複数のサブ回路からの入力を必要とするゲートである。
【００６０】
橋渡しされたサブ回路をもつれ状態にするかどうかを決定すること（１０６０）は橋渡しされたサブ回路をもつれ状態にする決定としない決定が対比される二者択一のシナリオのリソース・コストを推定することと、各決定と関連付けられたリソース・コストを比較することと、次いで最低コストの選択肢を選択することと、を含み得る。
【００６１】
橋渡しされたサブ回路を閉じること（１０７０）は、その橋渡しされたサブ回路への他のゲートの追加を防止するために、そのサブ回路を完了したものとしてマークすることを含み得る。橋渡しするゲートを新しいサブ回路に割り当てること（１０７０）は、新しいサブ回路を作成することと、閉じられた橋渡しされたサブ回路のキュービットをこの新しいサブ回路に割り当てることと、次いで橋渡しするゲートをこの新しいサブ回路に割り当てることと、を含み得る。
【００６２】
橋渡しするゲートをもつれ状態のサブ回路のうちの１つに追加すること（１０８０）は、橋渡しするゲートをサブ回路に含まれるゲートのリストに追加することを含み得る。この追加するステップは、橋渡しするゲートを、新しい橋渡しするゲートが対角ユニタリとなるゲートの等価な組合せで最初に置き換えることも含み得る。例としては、ＣＮＯＴゲートを図２１に示すようなＣＺゲートとアダマール・ゲートの組合せで置き換えることであり、これにより、図２０に示すＣＮＯＴゲートが、図２１に示すようなゲートのこの等価な組合せで置き換えられる。そのような置換が行われるとき、新しい橋渡しするゲートは橋渡しされたサブ回路のうちの１つに割り当てられ、この書き換えにおいて導入できた可能性のあるどの単一キュービットのゲートも、サブ回路に割り当てられるキュービットに従ってこれらのサブ回路に割り当てられる。例えば、ＣＮＯＴゲートをＣＺゲートで置き換える特定の例では、導入されるアダマール・ゲートは、ステップ１０２０と関連して上記した後続の段のゲートをサブ回路に追加するためのルールに従うように、対応するキュービットが割り当てられるサブ回路に割り当てられる。他方でＣＺゲートは、もつれ状態のサブ回路のどちらにも割り当てることができる。
【００６３】
図１８は、本発明の少なくとも１つの実施形態に係る量子回路実行方法１１００の一例を記述したフローチャートである。記述されているように、量子回路実行方法１１００は、順序付けされた量子サブ回路の組を受信すること（１１１０）と、個別のインデックス変数を割り当てること（１１２０）と、インデックス変数を伝播すること（１１３０）と、各量子サブ回路を実行すること（１１４０）と、を含む。量子回路実行方法１１００は、サブ回路へと分割された量子回路の実行を可能にする。量子回路実行方法１１００は、図２８に記述されているコンピュータ１５００などのコンピュータによって実行することができる。
【００６４】
量子サブ回路の順序付けされた組を受信すること（１１１０）は、各量子サブ回路を中に含まれるゲートを含めて定義するオブジェクトまたはデータ構造を指すポインタの、順序付けされたリストを受信することを含み得る。一実施形態では、各量子サブ回路に関する定義は本質的に、図６に示す実行プランと同様のサブ回路実行プランである。個別のインデックス変数を割り当てること（１１２０）は、個別のインデックス変数をキュービットごとの初期状態におよび非対角ユニタリ・ゲートごとの出力に割り当てることを含み得る。
【００６５】
インデックス変数を伝播すること（１１３０）は、各対角ユニタリ・ゲートについてインデックス変数を入力から出力へと反復的に伝播することを含み得る。各量子サブ回路を実行すること（１１４０）は、各量子サブ回路を実行することと、生み出された結果を指定された順序で組み合わせることと、を含み得る。
【００６６】
図１９は、図１８に記述されている実行操作１１４０の可能な実施形態を記述したフローチャートである。記述されているように、サブ回路を実行（１１４０）し結果を組み合わせる実施形態は、テンソルの積を構成すること（１１５０）と合計すること（１１６０）とを含み得る。
【００６７】
テンソルの積を構成すること（１１５０）は、サブ回路に属するゲートを、ステップ１１２０および１１３０においてそれらのゲートに割り当てられたインデックス変数と共に特定することと、これらのインデックス変数を下付き文字としてサブ回路中のゲートについての対応するテンソルに割り当てることと、サブ回路についてのテンソルを結合して入力−出力の順序で配列された積にすることと、含み得る。テンソルの積を構成すること（１１５０）は、サブ回路のシミュレーション結果に対応するテンソルを、図８と関連して記載されている決定演算７４０または図１７と関連して記載されている決定演算１０４０あるいはその両方を介して得られた実行の順序付けに従って結合して、テンソルの積にすることも含み得る。
【００６８】
合計すること（１１６０）は、サブ回路についてのテンソルの積を上記した構成演算１１５０において決定された入力−出力の順序で計算することと、これらのサブ回路の内部のインデックス変数が決定された入力−出力の順序で突き合わされる際にそれらを合計することと、を含み得る。全体としての回路の内部のインデックス変数の合計を行うこと（１１６０）は、サブ回路のシミュレーション結果を組み合わせるために、上記した構成演算１１５０において決定されたテンソルの積を計算するときに、そのようなインデックス変数を合計することを含み得る。あるキュービットについて回路中にシミュレートすべきゲートが残っていないか、またはそのキュービットについての残りの全てのゲートが対角ユニタリ・ゲートである場合、サブ回路のシミュレーション結果のこの組合せの前に、１つまたは複数のそのようなキュービットの可能な値に対してループする、ｆｏｒ−ループの導入が行われる。次いで、影響を受けたテンソルのスライスについて後続のテンソル積およびそれらの合計を計算して、後続の計算のメモリ必要量を減らすことができる。
【００６９】
図２０〜２２は、量子回路の１つの特定の例を最適化する一例を記述した回路図である。いくつかの実施形態では、本明細書で開示する方法中の様々なポイントにおいて、ゲート置換（回路書き換えとしても知られる）を行うことができる。例えば、図２１に示すような書き換えなどの回路書き換えは、図８に示す方法７００のステップ７２０と関連して、または図１７に示す方法１０００のステップ１０８０を行うときに、行われてもよい。特に、橋渡しするＣＮＯＴゲートをＣＺゲートおよびアダマール・ゲートの等価な構成と置き換えることにより、対応するサブ回路がもつれ状態にあるときに導入されるもつれ状態のインデックスの数を減らすことができ、そしてこのことは、結果的なもつれ状態のサブ回路をシミュレートするために必要となるメモリの量を低減する効果を有する。
【００７０】
再び図１８のステップ１１４０および図１９に示すようなその可能な実施形態を参照すれば、本発明の少なくとも１つの実施形態では、個々のキュービットの初期状態から作成された初期のサブ回路から始まる入力−出力の順序で、サブ回路が効率的にシミュレートされることを、当業者は諒解するであろう。そのような手法では、後続のサブ回路は、それらが入力について依存する先行するサブ回路のシミュレートが完了するまではシミュレートされないであろう。各サブ回路についてのシミュレーション結果は、コンピュータメモリにおいてｎ次元のアレイとして表すことのできる、ｎ次元のテンソルに対応し得る。線形のアレイなどの、等価な表現を提供する他のデータ構造を採用してもよいことを、当業者は認識するであろう。
【００７１】
一実施形態では、これらのデータ構造に格納される値は、１６バイトの記憶装置を各々必要とする、倍精度複素浮動小数点数であり得る。Ｎ次元のテンソル／アレイのメモリ・フットプリントはその場合、テンソル／アレイ中の全２ｎ個の値を格納するために、２（ｎ＋４）バイトを必要とするであろう。
【００７２】
個々のキュービットの初期状態から作成された初期のサブ回路は、ゼロの位置における１の値および１の位置におけるゼロの値で初期化される、１次元のテンソル／アレイであり得る。この初期化はクロネッカー・デルタのテンソル
【数５】
2020534603.tif 000007
に対応し、この式は更に以下の量子基底状態｜０〉に対応する：
【００７３】
【数６】
2020534603.tif 000008
【００７４】
先行する入力サブ回路のみに依存する後続のサブ回路について、シミュレーション結果のアレイを、先行する入力サブ回路のシミュレーション結果を用いて初期化することができる。一般に、先行する入力サブ回路のシミュレーション結果のテンソル／アレイが次元ｎを有する場合、および、対応する後続のサブ回路について、先行する入力サブ回路のシミュレーションにおいてまだスライスされていなかったｓ個の新しいキュービットが、スライス用に特定されている場合には、この後続のサブ回路のシミュレーションは、スライス用に特定されたｓ個の新しいキュービット（存在する場合）の可能な値に対してループするｆｏｒ−ループを導入することと、ｎ−ｓ次元のテンソル／アレイ（または後続のサブ回路についてのシミュレーション結果を保持するのに好適な他のデータ構造を）作成することと、次いで、ｆｏｒ−ループ変数の値によって特定されたスライス（存在する場合）について、先行する入力サブ回路についてのシミュレーション結果から対応する値をコピーすることによって、このｎ−ｓ次元のテンソル／アレイを初期化することと、を含み得る。次いで、問題の現時点の後続のサブ回路に関するシミュレーション計算をこれらのｆｏｒ−ループ内で行うことができ、これはまだシミュレートされていない全ての下流のサブ回路のシミュレーションの計算についても同様であるが、その理由は、これらのスライスするｆｏｒ−ループがこれらの下流のサブ回路にも同様に適用可能であるからである。
【００７５】
２つの先行する入力サブ回路に依存する後続のサブ回路に対して、そのような後続のサブ回路のシミュレーション結果に関する初期の次元の数はｎ＋ｍ−ｇ−ｓによって与えられ、ここでｎおよびｍは、先行する２つの入力サブ回路のシミュレーション結果のそれぞれにおける次元の数であり、ｇは、処理のこの段において加算され得る、これら２つのサブ回路の間で共有されるもつれ状態のインデックスの数であり、ｓは、この後続のサブ回路に関する、先行する入力サブ回路のいずれかのシミュレーションにおいてまだスライスされていなかった、スライス用に特定された新しいキュービットの数である。この後続のサブ回路のシミュレーションは、スライス用に特定されたｓ個の新しいキュービット（存在する場合）の可能な値に対してループするｆｏｒ−ループを導入することと、ｎ＋ｍ−ｇ−ｓ次元のアレイまたは後続のサブ回路についてのシミュレーション結果を保持するのに好適な他のデータ構造を作成することと、次いで、ｆｏｒ−ループ変数の値によって特定されたスライス（存在する場合）について、２つの先行する入力サブ回路についてのシミュレーション結果のテンソル乗算を行うことによって、このｎ＋ｍ−ｇ−ｓ次元のアレイを初期化することと、処理のこの段において加算され得る、これら２つのサブ回路の間で共有されるもつれ状態のインデックス（存在する場合）を加算することと、を含み得る。
【００７６】
先行する入力サブ回路のシミュレーション結果をこのように組み合わせて後続のサブ回路のシミュレーションを初期化するとき、加算され得る共有されるもつれ状態のインデックスは、この最終的な組み合わせ演算へと直接的または間接的に現在進んでいる、もつれ状態のインデックスを作成するために元々もつれ状態であったサブ回路の全てからのシミュレーション結果に関するインデックスであり、これらのインデックスは、これらの先行する入力サブ回路のどれに関しても出力インデックスとしては現れない。この要件の最初の部分は、インデックス変数を加算するための代数学の分配法則を反映しており、そのインデックス変数を下付き文字として含む全ての項が、合計中に現れねばならない。この要件の２番目の部分は、量子回路に関するインデックス変数を加算できる条件を反映している：変数はシミュレーションの現時点のポイントまで完全に回路の内部になければならず、出力と関連付けることはできない。通常、回路が２つのキュービットに関する複数キュービットのゲートしか含まない場合、組み合わされる２つのサブ回路のシミュレーション結果が共通のもつれ状態のインデックスを共有するときは常に、上記の要件の最初の部分が満たされることになる。しかしながら、回路が３キュービット以上のゲートを含む場合には、この最初の要件を詳細にチェックしなければならない。
【００７７】
２つ以上の先行する入力サブ回路のシミュレーション結果を後続のサブ回路への入力として組み合わせる必要のあるケースは、３つ以上のキュービットに関する複数キュービットのゲートを含む量子回路について、フローチャート１０００に示すプロセスを適用するときにのみ生じ得る。これらのケースに関するシミュレーションのステップは、どの共有されたもつれ状態インデックスを加算すべきかを決定するための上記の条件を含め、上記した２つのサブ回路のケースの場合と同じ構造に従い得る。一般に、上記した２入力の方法を繰り返し適用することによって、これらの結果を対になるように組み合わせることが、演算上有利であり得る。経験則では、各ステップにおいて組み合わせるべき結果の対は、そのステップの結果として最低次元のテンソル／アレイが得られる対であるべきである。この経験則は、組み合わされたシミュレーション結果を計算するために行う必要のある浮動小数点演算の合計回数を減らすのに役立つ。この同じ方法をシミュレーションの最後に使用して、２つ以上のサブ回路が残っているときの最終的なサブ回路のシミュレーション結果を組み合わせることができる。
【００７８】
サブ回路のシミュレーション結果を保持するためのテンソル／アレイの初期化が完了してしまうと、テンソル／アレイに入力−出力の順序でゲートを適用することによって、そのサブ回路についての最終的なシミュレーション結果を演算することができる。もつれ状態のインデックスの導入をもたらさないゲートの適用に関して、これらの演算を定義する式は図３〜６に示す形態を有し、これらの式において、ψはゲート適用前のシミュレーション結果のテンソル／アレイの値を表し、ψ’はゲート適用後の値を表す。図３〜６に見られる式は単なる例示に過ぎず、挙げられていない他の種類の量子ゲートについて、対応する式を明白な方法で容易に構成できることを、当業者は認識するであろう。
【００７９】
もつれ状態のインデックスの作成をもたらすゲートの適用には異なる取り扱いが必要となるが、これは、そのようなゲートの適用は通常、シミュレーション結果のテンソル／アレイの次元の数を増やし、この結果、どの次元がサブ回路に割り当てられているキュービットに現在対応しているかを、どの次元がもつれ状態のインデックスに対応するかと対比して追跡する必要が生じるからである。
【００８０】
図１７に記述されているプロセス中のステップ１０６０においてサブ回路をもつれ状態にする決定が行われ、次いでステップ１０８０において橋渡しする複数キュービットのゲートがサブ回路のうちの１つに割り当てられる場合、複数キュービットのゲートが割り当てられるサブ回路についてのシミュレーション結果のテンソル／アレイは、その複数キュービットのゲートがシミュレートされるシミュレーション中に、サイズを大きくしなければならない。複数キュービットのゲートが２キュービットの対角ユニタリ・ゲートである場合、１つの追加の次元を追加せねばならず、２キュービットの非対角ユニタリ・ゲートの場合、２つの追加の次元を追加せねばならない。３つ以上のキュービットのゲートの場合、対応する次元の増加を行わねばならない。これらの追加の次元は、もつれ状態のインデックスに対応する。
【００８１】
例えば、図２３に記述されている量子回路およびサブ回路を検討されたい。これらのサブ回路は、図１７に記述されているプロセスを用いて以下のようにして得ることができる。ステップ１０１０においてキュービットｑ［０］およびｑ［１］に対するサブ回路を作成した後で、ステップ１０２０において上側左のＨゲートをｑ［０］についてのサブ回路に割り当てることができ、この場合、キュービットｑ［０］についての残りの全てのゲートが対角ユニタリであることが留意され得る。上記後段により、ｑ［０］についての上側左のサブ回路を閉じること、および、今やキュービットｑ［０］をスライスできると注釈して、キュービットｑ［０］に対して新しいサブ回路を開始することが可能になる。またステップ１０２０において、下側左のＸおよびＨを、キュービットｑ［１］に対するサブ回路に割り当てることができる。橋渡しするＣＺゲートに起因して、ステップ１０２０において追加のゲートを現時点のサブ回路に割り当てることはできず、したがって、ＣＺゲートを選択するために、プロセスはステップ１０５０に進むことができる。ステップ１０６０において、ｑ［０］およびｑ［１］についてのサブ回路をもつれ状態にする決定を行うことができ、ステップ１０８０において、ｑ［０］についての現時点のサブ回路にＣＺゲートを割り当てることができる。プロセスは次いでステップ１０２０に戻ることができ、そこで、上側左のＺゲートをｑ［０］についての現時点のサブ回路に割り当てることができ、下側左のＨおよびＹゲートをｑ［１］についてのサブ回路に割り当てることができ、この結果、図２３に記述されているサブ回路の構成が得られる。
【００８２】
引き続き、図１８の実行ステップ１１４０の実施形態を記述している図１９のステップ１１５０および１１６０に進むと、上側左のサブ回路のシミュレーションは、上側左のサブ回路についてのシミュレーション結果を含むテンソル／アレイを初期化してクロネッカー・デルタのテンソルにすること、および次いでＨゲートを適用してシミュレーション結果を更新することによって、進行し得る：
【００８３】
【数７】
2020534603.tif 000009
上側右のサブ回路のシミュレーションはその場合、キュービットｑ［０］についてスライスするｆｏｒ−ループを導入すること、および上側右のサブ回路についてのテンソル／アレイを
【数８】
2020534603.tif 000010
のスライスと等しくなるように初期化することに関与し得る：
【００８４】
【数９】
2020534603.tif 000011
【００８５】
ＣＺゲートは下側のサブ回路ともつれ状態にあるときに上側右のサブ回路に割り当てられたので、新しいテンソル／アレイには、ＣＺゲートをシミュレートするプロセスにおけるもつれ状態のインデックスｅに対処するための追加の次元を割り当てることができる：
【００８６】
【数１０】
2020534603.tif 000012
【００８７】
次いでＺゲートのシミュレーションを通常通り行って、この新しいテンソル／アレイを更新することができる：
【００８８】
【数１１】
2020534603.tif 000013
【００８９】
もつれ状態の決定が行われるときに複数キュービットのゲートを割り当てられないサブ回路の場合、シミュレーション結果のテンソル／アレイのサイズを大きくしなければならないポイントは（仮にあるとすれば）、導入されるもつれ状態のインデックスの数に、および、（存在する場合）そのうちのどれが、厳密にサブ回路の内部にあるまたは全体としての回路の内部にあるあるいはその両方であるかに依存する。もつれ状態であるときに複数キュービットのゲートを割り当てられなかったサブ回路の内部にある各もつれ状態のインデックスは、そのサブ回路についてのシミュレーション結果のテンソル／アレイに追加の次元を追加することになる。もつれ状態であるときに複数キュービットのゲートを割り当てられなかったサブ回路の内部にはないが全体としての回路の内部にある、もつれ状態のインデックスは、いくつかの下流のサブ回路のシミュレーション結果のテンソル／アレイに追加の次元を追加することになる。この理由は、回路の内部にある全てのインデックスを、シミュレーション中のいずれかのポイントにおいて加算しなければならないからである。
【００９０】
もつれ状態のインデックスを導入する目的は、シミュレーション結果のテンソル／アレイの次元を上げることによって、これらの合計をシミュレーションのより後期の段まで留保し、このことにより、この技法を有効にするために必要な演算ブックキーピングを行えるように、およびその後で、もつれ状態のインデックスを共有するサブ回路のシミュレーション結果を組み合わせるときに合計を行えるようにすることである。したがって、もつれ状態のインデックスを適切に取り扱えるように、それらを回路全体にわたって追跡することが重要である。そのような次元の増加が生じる正確なポイントは、関与している複数キュービットのゲートが対角ユニタリであるかそれとも非対角であるかに依存する。
【００９１】
例として、図２３に記述されている下側のサブ回路の場合、シミュレーション結果を初期化してクロネッカー・デルタのテンソルにすることができ、その後、Ｘゲートおよび最初のＨゲートを通常通り適用することができる：
【００９２】
【数１２】
2020534603.tif 000014
【００９３】
ＣＺゲートはこのサブ回路に割り当てられておらず、したがってインデックス変数ｅは、このサブ回路に対するＣＺゲートの効果の根拠となるもつれ状態のインデックスとなる。ｅはもつれ状態のインデックスであるため、２番目のＨゲートが適用されるとき、ｅの合計を行うことはできない。代わりに、新しいテンソル／アレイには、２番目のＨゲートをシミュレートするプロセスにおけるもつれ状態のインデックスｅに対処するための、追加の次元を割り当てることができる：
【００９４】
【数１３】
2020534603.tif 000015
次いでＹゲートのシミュレーションを通常通り行って、この新しいテンソル／アレイを更新することができる：
【００９５】
【数１４】
2020534603.tif 000016
【００９６】
Ｈゲートは非対角ゲートであるので、通常は合計を必要とすることに留意されたい。この合計は最終的には、サブ回路のシミュレーション結果を組み合わせるときに、もつれ状態のインデックスを加算するためのルールに従って行われることになる。もつれ状態のインデックスの導入は、これらの合計をシミュレーションのより後期の段まで留保するための機構である。
【００９７】
もつれ状態のインデックスｅは、上側右および下側のサブ回路の結果が組み合わされるときに、最終的に加算され得る。上側右のサブ回路はスライスしてシミュレートされるので、回路の最終的なシミュレーション結果ψｂｇに関する組み合わせるステップは、上側右のテンソルについてのスライスするｆｏｒ−ループ内で実行されるであろう：
【００９８】
【数１５】
2020534603.tif 000017
【００９９】
図２４は、図２３に記述されている同じ回路についてのサブ回路の代替の組を示し、この場合ＣＺゲートは、図１７のステップ１０８０における上側右のサブ回路の代わりに、下側のサブ回路に割り当てられる。この場合、今度はｂがもつれ状態のインデックスである。下側のサブ回路のシミュレーションにおいて、初期のシミュレーション結果のテンソル／アレイを１次元となるように初期化することができ、次いでＣＺゲートが適用されるときに２次元へと大きくすることができる。
【０１００】
【数１６】
2020534603.tif 000018
【０１０１】
上側右のサブ回路のシミュレーションでは、シミュレーション結果のテンソル／アレイを、前出のように上側左のサブ回路の結果のスライスとなるように初期化することができるが、今度はＺゲートがシミュレートされるときに次元が増加せず、その理由は、もつれ状態のインデックスｂは既にシミュレーション結果のインデックスであり、Ｚは対角ユニタリ・ゲートであるので、適用されるときにｂの合計を行う必要がないからである。この結果、ｂはサブ回路の内部にはなく、これは出力インデックスである：
【０１０２】
【数１７】
2020534603.tif 000019
【０１０３】
上記のサブ回路が、非対角ゲートが最終的に後続のサブ回路中のキュービットｑ［０］に適用される、より大きい回路の一部であると仮定すると、その場合、上側右のサブ回路についてのシミュレーション結果のテンソル／アレイの次元は依然として変化しなかったであろうし、またｑ［０］は上側右のサブ回路のシミュレーションの一部としてスライスされていなかったであろうことに留意されたい。代わりに、キュービットｑ［０］に適用される非対角ゲートを含んだ後続のサブ回路のシミュレーション中に、もつれ状態のインデックス変数ｂに対処するためのシミュレーション結果のテンソル／アレイの次元の増加が生じていたと考えられるが、その理由は、このポイントではｂは全体としての回路の内部のインデックスになると考えられ、したがって加算する必要があったと考えられるからである。
【０１０４】
図２３に記述されているサブ回路の場合のように、図２４に記述されている上側右および下側のテンソルについてのシミュレーション結果は、上側のテンソルについてのスライスするｆｏｒ−ループ内で組み合わされると考えられるが、今度はｂが全体としての回路の内部にないので、結果が組み合わされるときにｂは加算されないであろう：
【０１０５】
【数１８】
2020534603.tif 000020
【０１０６】
既に述べたように、２キュービットの非対角ユニタリ・ゲートは、そのようなゲートよって橋渡しされる２つのサブ回路をもつれ状態にする決定が行われるとき、２つのもつれ状態のインデックスをもたらす。図２５に示す回路およびサブ回路がその例である。これらのサブ回路は、図１７のステップ１０６０において上側および下側のサブ回路をもつれ状態にするよう選択し、次いでステップ１０８０においてＣＮＯＴゲートを上側のサブ回路に割り当てることによって、ＣＮＯＴをＣＺゲートおよびＨゲートで置き換えるための回路書き換えを行うことなく得ることができる。ＣＮＯＴゲートを上側のサブ回路に割り当てることによって、ｅおよびｆはいずれももつれ状態のインデックスとなる。上側のサブ回路がシミュレートされるとき、シミュレーション結果を保持するために初期の１次元のテンソル／アレイを作成することができ、ＣＮＯＴをシミュレートするときには、次いで３次元のテンソル／アレイが作成され得る：
τ’ａ＝δａ
τ’ｂ←ΣｂＨｂａτ’ａ
τ”ｃｅｆ＝ΣｂＣＮＯＴｃｆｂｅτ’ｂ
τ”ｃｅｆ←Ｚｃτ”ｃｅｆ
【０１０７】
下側の回路がシミュレートされるとき、シミュレーション結果を保持するために初期の１次元のテンソル／アレイを作成することができ、非対角Ｙゲートをシミュレートするときには、次いで３次元のテンソル／アレイが作成され得る：
【０１０８】
【数１９】
2020534603.tif 000021
その場合、もつれ状態のインデックスはいずれも全体としての回路の内側にあるので、結果を組み合わせるときにそれらを加算することができる：
【０１０９】
【数２０】
2020534603.tif 000022
【０１１０】
図１７のステップ１０８０においてＣＮＯＴゲートが代わりに下側のサブ回路に割り当てられる場合には、図２６に示すようにｂおよびｃがもつれ状態のインデックスとなる。上側のサブ回路がシミュレートされるとき、シミュレーション結果を保持するために初期の１次元のテンソル／アレイを作成することができ、Ｚゲートをシミュレートするときは、２次元のテンソル／アレイのみが作成され得る。この場合、ｂは既にもつれ状態のインデックスであり、Ｚゲートのシミュレーションにより、シミュレーション結果のテンソル／アレイのインデックス変数にｃが導入される。
τ’ａ＝δａ
τ’ｂ←ΣｂＨｂａτ’ａ
τ”ｂｃ＝Ｚｃτ’ｂ
【０１１１】
下側のサブ回路がシミュレートされるとき、シミュレーション結果を保持するために初期の１次元のテンソル／アレイを作成することができ、ＣＮＯＴをシミュレートするときには、次いで３次元のテンソル／アレイが作成され得る：
【０１１２】
【数２１】
2020534603.tif 000023
【０１１３】
ｃは出力インデックスであり回路の内部に無いので、上側および下側のサブ回路のシミュレーション結果が組み合わされるとき、合計はｂに対してのみ行われ、ｃに対しては行われない：
【０１１４】
【数２２】
2020534603.tif 000024
【０１１５】
スライスするｆｏｒ−ループが導入されてしまうと、このポイントへの到達後にシミュレートされるサブ回路のスライスするｆｏｒ−ループを含め、これらのｆｏｒ−ループ内で後続のシミュレーションのステップを実施する必要があることに留意されたい。したがって、スライスされずにシミュレートされるサブ回路は全て、それらのシミュレーション結果の余分な再演算を回避するために、実行においてスライスするループの導入前にシミュレートされるべきである。結果的なシミュレーション結果を保持するのに十分なメモリが利用可能であるならば、スライスの導入はまったく任意選択的なものであることに留意されたい。スライス可能なシミュレーション結果の中からどれを実際にスライスするかを取捨選択できる。いくつかのサブ回路の全シミュレーション結果を二次記憶装置に保存し、その後スライスするループ内でこれらのシミュレーション結果のスライスを取り出すことができることも、当業者は認識するであろう。これらの全シミュレーション結果自体を可能なときはスライスして演算し、二次記憶装置に書き込むことができ、全シミュレーション結果をメイン・メモリに存在させる必要はない。
【０１１６】
当業者は同様に、演算の目的が回路の最終的な量子状態における全ての振幅を計算することである場合にのみ、スライスするループが必要となることを認識するであろう。そうではなく、単に測定された結果の振幅を計算したいだけである場合には、代わりにｆｏｒ−ループを、測定された結果が規定するようなキュービットに関する設定値で置き換えることができる。スライスする操作がやはり行わるとしても、この場合は対応するキュービットの測定された値が使用される。測定値の組に対して振幅を計算する必要がある場合には、効率性のために、スライスできないサブ回路のシミュレーション結果を最初に計算でき、次いで測定された各結果に対して反復するようにループを設定し、これに応じて反復ごとにスライスされたキュービットの値を設定することができる。このシミュレーション手法では、もはやｆｏｒ−ループをネストする必要はなく、このことにより、残りのサブ回路のシミュレーションの順序の自由度をより大きくすることができる。
【０１１７】
図２７には、量子回路を現時点で利用可能な演算システム上でシミュレートできるようにする、図６に対応する大きな量子回路のサブ回路への分割が記述されている。図６には、Ｂｏｉｘｏらによって、既存の古典コンピュータ上では明らかにシミュレートするのが不可能であるように特定的に設計された、ランダムに生み出された量子回路のクラスに属する量子回路が記述されている。Ｂｏｉｘｏらは２０１６年の研究論文「Ｓｔａｔｅ−ｏｆ−ｔｈｅ−ａｒｔ  ｓｕｐｅｒｃｏｍｐｕｔｅｒｓ  ｃａｎｎｏｔ  ｓｉｍｕｌａｔｅ  ｕｎｉｖｅｒｓａｌ  ｒａｎｄｏｍ  ｃｉｒｃｕｉｔｓ  ｗｉｔｈ  ｄｅｐｔｈ  ２５  ｉｎ  ａ  ２Ｄ  ｌａｔｔｉｃｅ  ｏｆ  ａｐｐｒｏｘｉｍａｔｅｌｙ  ７  ｘ  ７  ｑｕｂｉｔｓ  ｗｉｔｈ  ａｎｙ  ｋｎｏｗｎ  ａｌｇｏｒｉｔｈｍ  ａｎｄ  ｓｉｇｎｉｆｉｃａｎｔ  ｆｉｄｅｌｉｔｙ」で、この論述の理論的根拠は、知られている技法を使用するこのようなシミュレーションでは、量子状態情報を格納するためだけでも８ペタバイトのメイン・メモリが必要となるが、既存のスーパー・コンピュータでそれだけ大きなメモリを有するものはないということである、と主張している。本発明を用いて図６に記述されている７×７キュービット、深さ２７の回路を分割しこれをシミュレートすることにより、発明者らは、シミュレーション結果のテンソル／アレイを格納するのに４．５テラバイトしか使用せずに、この回路をシミュレートできた。
【０１１８】
図２７には、発明者らが採用した分割が描かれている。図２０〜２２の対応するタイルの背景の数字「１」を含む部分に属する図６のゲートは、上側のサブ回路と呼ばれることになるあるサブ回路に属する。図２０〜２２の対応するタイルの明るい灰色の背景の数字「２」を含む部分に属する図６のゲートは、下側のサブ回路と呼ばれることになる別のサブ回路に属する。図２０〜２２の対応するタイルの暗い灰色の背景の数字「３」を含むまたは黒い背景に白色の文字「Ｓ」を含む部分に属する図６のゲートは、「左」サブ回路と呼ばれることになる第３のサブ回路に属する。上側および下側のサブ回路はもつれ状態にあり、この場合橋渡しするゲートはＣＺゲートであって、図６に記述されているタイルの一番上の行の右端から２つのタイルの第３行と第４行にまたがっている。これらのＣＺゲートは、回路をシミュレートする能力に影響を与えることなく、上側または下側のサブ回路のいずれかに割り当てることができる。発明者らが行ったシミュレーションでは、これらのＣＺゲートを恣意的に下側のサブ回路に割り当てた。組み合わせた上側および下側のサブ回路は、それらのシミュレーション結果を格納するために０．５テラバイトを必要とし、一方、左のサブ回路は４テラバイトを必要とした。上側および下側のサブ回路についてシミュレーション結果を計算した後で、スライスするループを設定して、文字「Ｓ」によって識別される明るい緑色で色付けされたキュービットならびに７×７タイルの底部に対応する残りのキュービットの値をスライスした。６４テラバイトの利用可能なメイン・メモリを提供する、４ラックのＩＢＭ  Ｂｌｕｅ  Ｇｅｎｅ  Ｑコンピュータでスライスの演算を行った。演算全体が６の倍数で高速化されるように、４つのラックの６つの異なるグループ上で、様々な範囲のループを実行した。
【０１１９】
８×７キュービット、深さ２３のランダム量子回路（記述せず）の１つのスライスもシミュレートした。この５６キュービットの回路を、非常に類似した様式で分割した。この場合、構成された３つのサブ回路についてのシミュレーション結果は、格納するのに３テラバイトのメイン・メモリしか必要としなかった。これに対して、従来技術のシミュレーション方法であれば、量子状態全体をメイン・メモリに格納しこれに対して演算を行うのに、１エクサバイトを必要としていたであろう。これらの例は、量子シミュレーションに対する本発明の非常に大きな利点を説明するものである。
【０１２０】
上に提示した内容に基づけば、上記のユース・ケースおよび本発明の他の可能なユース・ケースの各々について、各サブ回路のシミュレーション結果の、ならびに、次元の数およびバイトの計数に関する最終的なシミュレーション結果の、初期のおよび最終的なサイズを計算する方法が、本発明の当業者には当然明らかであろう。本発明をどのように実施し得るかに関する上記のユース・ケース、ならびに本発明の他の可能なユース・ケースの各々について、各サブ回路をシミュレートし最終的な結果を組み合わせるために必要な浮動小数点演算の回数を推定する方法もまた、当業者には当然明らかであろう。目標となる配備システム上で利用可能な最大メモリの制限下で、上記のユース・ケースならびに本発明の他の可能なユース・ケースの各々について、例えば浮動小数点演算の回数を最小にする回路分割を見つけるために、図１７に示すプロセスと関連させて、様々な従来技術の最適化技法を採用できることを、当業者は認識するであろう。例としては、深さ優先探索、幅優先探索、反復増深的な深さ優先探索、ダイクストラのアルゴリズム、およびＡ＊探索が挙げられる。
【０１２１】
図１７に記述されているプロセスを深さ優先の再帰的最適化プロセスとして実施することは、図１７に記述されているこのプロセス中の各決定ポイントにおいて、全ての可能な決定選択に対してループさせるためのループを導入すること、次いでこれらのループ内でプロセス中のこれらのポイントから図１７に記述されているプロセスを再帰的に呼び出して可能な各選択に順方向に適用すること、およびループの終了時に所望のリソース・コストの尺度を最適化する選択を返すことを含み得ることを、当業者は認識するであろう。これらの決定ポイントは、割り当て可能な橋渡しするゲートを選択するためのステップ１０５０と、サブ回路をもつれ状態にするかどうかを選択するためのステップ１０６０と、橋渡しするゲートをサブ回路に割り当てるためのステップ１０８０と、サブ回路実行順序を決定するためのステップ１０４０と、を含み得る。これらのポイントにおける決定のあるものは、代わりに経験則を適用して行われてもよく、また決定のあるものは、深さ優先探索の一部として含まれてもよい。最小化することが望まれるリソース・コスト尺度としては、最大メモリ必要量、全ての振幅を計算するための浮動小数点演算の合計回数、または単一の振幅を計算するための浮動小数点演算の合計回数を挙げることができる。条件テストを導入して、所望の制約に違反した場合に選択を放棄するようにしてもよい。所望の制約には、シミュレーションのための合計メモリ必要量を指定された限度内に留めることが含まれ得る。これらには、深さ優先処理自体が消費する合計ランタイムに対する制限も含まれ得る。深さ優先処理は、所望のリソース・コスト尺度に従って、その時点までに見つかった現時点の最善の選択の組の記録を取るために実施され得るので、ランタイム制限が課される場合など、深さ優先処理が完全な探索が行われる前に終了される場合であっても、深さ優先処理を実行したことによる利益を依然として得ることができる。
【０１２２】
すぐ前に記載した深さ優先探索プロセスにより、可能な決定選択シークエンスのツリーが、これによりもたらされる回路分割と共に有効に生み出されることを、当業者は認識するであろう。幅優先探索は、このツリーを１回に１レベルずつ探索する。幅優先探索を反復的に増深する深さ優先探索として実施してもよく、この場合、行われる決定の数に対して制限が課され、この制限を超えると探索ツリーの枝が放棄されることを、当業者は認識するであろう。幅優先探索の動機付けとなるのは、探索深さと共に探索コストが指数関数的に増大する傾向があるので、最適化問題の妥当な解を浅い探索深さ内で見つけることができるのであれば、恐らくその解は適切であると考えられる、ということである。解が見つからなければ、深さ制限を上げて探索し直すことによって、更に深くまで探索することができる。
【０１２３】
本発明の文脈では、単に探索の深さに対してのみでなく、図１７のステップ１０６０においてもつれ状態にする選択を選択できる回数に対しても、制限が課される場合がある。ステップ１０６０でもつれ状態にする選択が一度も行われず、代わりに常にステップ１０７０に進むことになると仮定すると、ステップ１０７０が実行される回数は、キュービットの数を超えることは決してないであろう。この理由は、ステップ１０７０が、サブ回路の結果を１つに組み合わせることの副産物として、キュービットのグループを１つに組み合わせる効果を持っており、そのようなグループ化演算の回数がグループ化されているキュービットの数を上回ることはあり得ないからである。サブ回路をもつれ状態にする選択がステップ１０６０において行われるたびに、そのポイントでの有効な探索ツリーがより広くなり、少なくとも１つの追加レベル分増深する。このことにより、もつれ状態にする選択を行うことのできる回数に、反復的に大きくなる制限を課すことにより、行われる探索の量を制限の所与の設定に合わせて制限することができ（これは幅優先探索の根底にある目的である）、一方同時に、完全に分割された回路の組に対して探索最適化を行うことができる。対照的に、探索の深さを単純に限定すれば、回路がサブ回路へと完全に分割される前に探索ツリーの枝が早期に終了され、このことにより、探索ツリーにおいて不適切な解を生み出すおよび探索するのに、大きな労力を浪費してしまうであろう。
【０１２４】
本発明とともに用いるのに同じく適している可能性のある、幅優先探索のバリエーションは、ダイクストラのアルゴリズムである。図１７に記述されているプロセス中の様々な決定ポイントで行われた選択の任意のシークエンスが与えられると、結果的なシミュレーションのプロセスが実際のシミュレーションにおける対応するポイントまでに消費するであろうリソース・コスト尺度を推定することができる。例としては、そのポイントまでの浮動小数点演算の累積回数、およびそのポイントまでの最大メモリ必要量が挙げられる。ダイクストラのアルゴリズムは、決定選択のシークエンスを結果的なシミュレーションにおける対応するポイントまでのリソース・コスト尺度と共にコード化するデータ構造を、優先キューのデータ構造に入れることによって実施され得ることを、当業者は認識するであろう。ダイクストラのアルゴリズムはこの場合、優先キューから最低コストの決定選択のシークエンスを選択し、次の可能な決定選択の各々を採用することと関連付けられたリソース・コストを推定し、結果的な次のステップの決定選択および関連付けられたリソース・コストを優先キューに入れ、これを繰り返すことによって進行し得る。図１７に記述されているプロセスに関して、初期には空である決定選択のシークエンスを、ステップ１０５０に対応する最初の決定ポイントに先行するステップ１０１０および１０２０を実行するリソース・コストと共に、優先キューに入れることによって、ダイクストラのアルゴリズムを初期化することができる。概念的に言えば、ダイクストラのアルゴリズムは、この時点までに得られた最低コストの決定のシークエンスを特定し、次いで、その決定のシークエンスが次の決定ポイントの結果が組み込まれた後で次にどこに至るかを見ることによって機能する。
【０１２５】
ダイクストラのアルゴリズムの更なるバリエーションがＡ＊探索であることを、当業者は認識するであろう。Ａ＊探索は、決定選択のシークエンスの結果生じるコストを、最適な決定選択のシークエンスがこれらのポイントから順方向に行われた場合にそれらのコストがどの程度増加するかの下限推定値を組み合わせることによって、ダイクストラのアルゴリズムを修正する。概念的に言えば、Ａ＊探索は、（探索における現時点のポイントまでのコストと対比して）合計コスト推定値が最低の決定のシークエンスを特定し、その決定のシークエンスが次の決定ポイントの結果が組み込まれた後で次にどこに至るかを見ることによって機能する。本発明の文脈では、既存のテンソルのサイズが大きくなることはないと仮定して任意の残りのゲートを適用するコストを計算することによって、残りの浮動小数点演算の回数の下限を得ることができる。サブ回路同士を橋渡しする複数キュービットのゲートの場合、最小の橋渡しされるサブ回路のサイズを使用して、複数キュービットのゲートを適用するコストの下限を計算することができる。メモリ必要量の増加の下限は、メモリ必要量のそれ以上の増加は起こらないと仮定することであり得る。
【０１２６】
図２８は、本明細書で開示する方法の実行に適した演算装置（すなわちコンピュータ１５００）の一例を記述したブロック図である。図２８は一実施形態を例示しているに過ぎず、様々な実施形態が実施され得る環境に関してどのような限定も示唆していないことが諒解されるべきである。記述されている環境に対して、多くの変更を行うことができる。
【０１２７】
記述されているように、コンピュータ１５００は通信ファブリック１５０２を含み、これにより、コンピュータ・プロセッサ１５０５、メモリ１５０６、持続的記憶装置１５０８、通信ユニット１５１２、および入力／出力（Ｉ／Ｏ）インターフェース１５１５の間の通信が提供される。通信ファブリック１５０２は、システム内のプロセッサ（マイクロプロセッサ、通信およびネットワーク・プロセッサ、等）、システム・メモリ、周辺デバイス、および任意の他のハードウェア・コンポーネントの間で、データを渡すまたは情報を制御するあるいはその両方を行うように設計された、任意のアーキテクチャを用いて実装することができる。例えば、通信ファブリック１５０２は、１つまたは複数のバスを用いて実装することができる。
【０１２８】
メモリ１５０６および持続的記憶装置１５０８は、コンピュータ可読記憶媒体である。記述されている実施形態では、メモリ１５０６は、ランダム・アクセス・メモリ（ＲＡＭ）１５１６とキャッシュ・メモリ１５１８とを含む。一般に、メモリ１５０６は、任意の好適な揮発性または不揮発性のコンピュータ可読記憶媒体を含み得る。
【０１２９】
１つまたは複数のプログラムを、メモリ１５０６のうちの１つまたは複数のメモリを介して、それぞれのコンピュータ・プロセッサ１５０５のうちの１つまたは複数によって実行できるように、持続的記憶装置１５０８に格納することができる。持続的記憶装置１５０８は、磁気ハード・ディスク・ドライブ、ソリッド・ステートのハード・ドライブ、半導体ストレージ・デバイス、読取り専用メモリ（ＲＯＭ）、消去可能なプログラマブル読取り専用メモリ（ＥＰＲＯＭ）、フラッシュ・メモリ、またはプログラム命令もしくはデジタル情報を格納できる任意の他のコンピュータ可読記憶媒体であり得る。
【０１３０】
持続的記憶装置１５０８が使用する媒体は、取り外し可能であってもよい。例えば、持続的記憶装置１５０８のために、取り外し可能なハード・トライブを使用してもよい。他の例としては、光学および磁気ディスク、サム・ドライブ、およびスマート・カードが挙げられ、これらは、やはり持続的記憶装置１５０８の一部である別のコンピュータ可読記憶媒体への転送のために、ドライブに挿入される。
【０１３１】
通信ユニット１５１２は、これらの例では、他のデータ処置システムまたはデバイスとの通信を提供する。これらの例では、通信ユニット１５１２は、１つまたは複数のネットワーク・インターフェース・カードを含む。通信ユニット１５１２は、物理的通信リンクまたはワイヤレス通信リンクの一方または両方の使用を介して、通信を提供してもよい。
【０１３２】
Ｉ／Ｏインターフェース１５１５により、コンピュータ１５００に接続され得る他のデバイスに対するデータの入出力が可能になる。例えば、Ｉ／Ｏインターフェース１５１５は、キーボード、キーパッド、タッチ・スクリーン、または何らかの他の好適な入力デバイスあるいはその組合せなどの、外部デバイス１５２０への接続を提供し得る。外部デバイス１５２０は、例えばサム・ドライブ、携帯型の光学または磁気ディスク、およびメモリ・カードなどの、携帯型コンピュータ可読記憶媒体も含み得る。
【０１３３】
本発明の実施形態を実施するために使用されるソフトウェアおよびデータは、そのような携帯型コンピュータ可読記憶媒体に記憶することができ、Ｉ／Ｏインターフェース１５１５を介して持続的記憶装置１５０８にロードされ得る。Ｉ／Ｏインターフェース１５１５は、ディスプレイ１５２２に接続することもできる。ディスプレイ１５２２はユーザにデータを表示するための機構を提供するもので、例えばコンピュータ・モニタであり得る。
【０１３４】
上で開示した実施形態を様々な環境および用途に適合させることができることを、当業者は諒解するであろう。また更に、本明細書に記載するプログラムは、本発明の特定の実施形態においてそれらを実装する用途に基づいて特定される。しかしながら、本明細書における任意の特定のプログラム用語は単に便宜的に使用されており、したがって、本発明を、そのような用語によって特定されるまたは示唆されるあるいはその両方である、何らかの特定の用途のみでの使用に限定するべきではないことが、諒解されるべきである。
【０１３５】
本明細書に開示される実施形態は、システム、方法、またはコンピュータ・プログラム製品あるいはそれらの組合せを含む。コンピュータ・プログラム製品は、本明細書に開示される方法をプロセッサに実行させるためのコンピュータ可読プログラム命令を有する、コンピュータ可読記憶媒体を含んでもよい。
【０１３６】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用される命令を保持および保存できる有形のデバイスとすることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、または以上の任意の好適な組合せであり得るが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストには、以下、すなわち、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、消去可能なプログラマブル読取り専用メモリ（ＥＰＲＯＭもしくはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読取り専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピー（Ｒ）・ディスク、命令が記録されているパンチカードもしくは溝の中の隆起構造などの機械的に符号化されたデバイス、および以上の任意の好適な組合せが含まれる。本明細書において使用されるコンピュータ可読記憶媒体は、電波もしくは他の自由に伝播する電磁波、導波路もしくは他の伝送媒体を通じて伝播する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、または配線を介して伝送される電気信号などの、一時的信号そのものであると解釈されるべきではない。
【０１３７】
本明細書に記載されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング／処理デバイスに、あるいは、ネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくはワイヤレス・ネットワーク、またはそれらの組合せを経由して、外部のコンピュータまたは外部ストレージ・デバイスに、ダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはそれらの組合せを備え得る。各コンピューティング／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースが、ネットワークからコンピュータ可読プログラム命令を受信し、それらのコンピュータ可読プログラム命令を、それぞれのコンピューティング／処理デバイス内のコンピュータ可読記憶媒体に保存されるように転送する。
【０１３８】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、マシン命令、マシン依存型命令、マイクロコード、ファームウェア命令、状態設定データ、または、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語もしくは類似のプログラミング言語などの従来の手続き型プログラミング言語を含む、１つもしくは複数のプログラミング言語の任意の組合せで書かれた、ソース・コードもしくはオブジェクト・コードのいずれか、であり得る。コンピュータ可読プログラム命令は、専らユーザのコンピュータ上で、スタンド・アロン・ソフトウェア・パッケージとして部分的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上でかつ部分的に遠隔のコンピュータ上で、または専ら遠隔のコンピュータもしくはサーバ上で、実行することができる。後者のシナリオでは、遠隔のコンピュータを、ローカル・エリア・ネットワーク（ＬＡＮ）もしくはワイド・エリア・ネットワーク（ＷＡＮ）を含む任意の種類のネットワークを介して使用者のコンピュータに接続してもよく、または、外部のコンピュータへの接続を（例えば、インターネット・サービス・プロバイダを利用してインターネットを介して）行ってもよい。いくつかの実施形態では、例えばプログラマブル・ロジック回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラマブル・ロジック・アレイ（ＰＬＡ）を含む電子回路は、本発明の態様を行うために、コンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行して電子回路を個人化することができる。
【０１３９】
本明細書には、本発明の実施形態に係る方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して、本発明の態様が記載されている。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方におけるブロックの組合せを、コンピュータ可読プログラム命令によって実施できることが、理解されるであろう。
【０１４０】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能データ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令はまた、命令が保存されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作の態様を実施する命令を含んだ製品を備えるように、コンピュータ可読記憶媒体に保存され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはそれらの組合せに特定の方式で機能するように指示できるものであってもよい。
【０１４１】
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラム可能装置、または他のデバイスで実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施するように、コンピュータによって実行されるプロセスを作り出すべく、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードされ、コンピュータ、他のプログラム可能装置、または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
【０１４２】
図中のフローチャートおよびブロック図には、本発明の様々な実施形態に係るシステム、方法、およびコンピュータ・プログラム製品の、可能な実装形態のアーキテクチャ、機能性、および動作が説明されている。この関連において、フローチャートまたはブロック図内の各ブロックは、指定された論理機能を実施するための１つまたは複数の実行可能命令を備える、モジュール、セグメント、または命令の一部分を表すことができる。いくつかの代替的実装形態において、ブロック内に記された機能は、図に記されたものとは異なる順序で行われ得る。例えば連続して示される２つのブロックは、実際は実質的に並行して実行され得、またはこれらのブロックは時には関わる機能に応じて、逆の順序で実行され得る。またブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組合せは、指定された機能もしくは動作を行う、または専用ハードウェアとコンピュータ命令の組合せを実行する、専用ハードウェア・ベースのシステムによって実施され得ることが、留意されるであろう。
【０１４３】
この説明は本発明を限定することを意図していないことに留意すべきである。反対に、提示される実施形態は、代替形態、変更形態、および均等物のうちのいくつかを包含することが意図されており、それらは添付の特許請求の範囲によって規定されるような本発明の思想および範囲に含まれている。更に、開示される実施形態の詳細な説明では、特許請求される発明の包括的な理解をもたらすために、多数の具体的な詳細が明記されている。しかしながら、当業者であれば、そのような具体的な詳細が無くても様々な実施形態を実施できることを理解するであろう。
【０１４４】
本明細書に開示する実施形態の特徴および要素は特定の組合せで記載されているが、各特徴または要素は、その実施形態のその他の特徴および要素を伴わずに単独で、または、本明細書で開示する他の特徴および要素を伴うもしくは伴わない様々な組合せで、使用することができる。
【０１４５】
この書面による説明では、任意のデバイスまたはシステムの製作および使用ならびに任意の組み込まれた方法の実行を含め、任意の当業者が開示される主題を実施できるようにするために、主題の例を使用している。主題の特許可能な範囲は特許請求の範囲によって規定され、当業者が想到する他の例を含み得る。そのような他の例は、特許請求の範囲に含まれることが意図されている。
【図１】
2020534603.tif 000025
【図２】
2020534603.tif 000026
【図３】
2020534603.tif 000027
【図４】
2020534603.tif 000028
【図５】
2020534603.tif 000029
【図６】
2020534603.tif 000030
【図７】
2020534603.tif 000031
【図８】
2020534603.tif 000032
【図９】
2020534603.tif 000033
【図１０】
2020534603.tif 000034
【図１１】
2020534603.tif 000035
【図１２】
2020534603.tif 000036
【図１３】
2020534603.tif 000037
【図１４】
2020534603.tif 000038
【図１５】
2020534603.tif 000039
【図１６】
2020534603.tif 000040
【図１７】
2020534603.tif 000041
【図１８】
2020534603.tif 000042
【図１９】
2020534603.tif 000043
【図２０】
2020534603.tif 000044
【図２１】
2020534603.tif 000045
【図２２】
2020534603.tif 000046
【図２３】
2020534603.tif 000047
【図２４】
2020534603.tif 000048
【図２５】
2020534603.tif 000049
【図２６】
2020534603.tif 000050
【図２７】
2020534603.tif 000051
【図２８】
2020534603.tif 000052
【手続補正書】
【提出日】令和2年4月20日(2020.4.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
１つまたは複数のプロセッサによって実行される、複数の量子ゲートを備える量子回路をシミュレートするための方法であって、
前記量子回路のデジタル記述を受信することと、
前記量子回路の前記デジタル記述を複数の量子サブ回路へと分割することであって、前記複数の量子サブ回路の各量子サブ回路は１つまたは複数の量子ゲートを備える、前記分割することと、
前記複数の量子サブ回路についてサブ回路依存度を決定することと、
前記サブ回路依存度に従って前記複数の量子サブ回路をシミュレートして、前記複数の量子サブ回路の各量子サブ回路についてシミュレーション結果を生成することと、を含み、
前記複数の量子サブ回路のうちの第１の量子サブ回路および第２の量子サブ回路は、共通のキュービットに適用される１つまたは複数のゲートを各々含み、
前記第１の量子サブ回路および前記第２の量子サブ回路は、もつれ状態のテンソル・インデックスを使用して互いに独立してシミュレートされる、方法。
【請求項２】
前記第１の量子サブ回路中の前記ゲートの全てが、前記第２の量子サブ回路中の前記ゲートの全てに厳密に先行するまたは厳密に後続する訳ではない、請求項１に記載の方法。
【請求項３】
前記第１の量子サブ回路および前記第２の量子サブ回路は重なり合うゲート段を含む、請求項１又は２に記載の方法。
【請求項４】
２つのサブ回路を橋渡しするもつれ状態のゲートは、単一キュービットのゲートともつれ状態の対角ユニタリ・ゲートの等価な組合せで置き換えられる、請求項１乃至３のいずれかに記載の方法。
【請求項５】
前記量子回路を、前記量子回路の１つまたは複数のより後期の段にもつれ状態のゲートが配されるように変換することを更に含む、請求項１乃至４のいずれかに記載の方法。
【請求項６】
前記量子回路を、前記量子回路の１つまたは複数の最終段に対角ユニタリ量子ゲートが配されるように変換することを更に含む、請求項１乃至５のいずれかに記載の方法。
【請求項７】
前記複数の量子サブ回路のうちの１つまたは複数の量子サブ回路に関する結果を使用して、前記量子回路の前記最終段をシミュレートすることを更に含む、請求項１乃至６のいずれかに記載の方法。
【請求項８】
サブ回路は入力−出力の順序でＦＯＩＬ方式でシミュレートされる、請求項１乃至７のいずれかに記載の方法。
【請求項９】
１つまたは複数のプロセッサによって実行される、複数の量子ゲートを備える量子回路をシミュレートするための方法であって、
複数の段を含む前記量子回路のデジタル記述を受信することと、
初期段の各キュービットに対してサブ回路を作成して複数のサブ回路を生成することと、
接続される橋渡ししないゲートを、接続される橋渡ししないゲートがそれ以上利用できなくなるまで、前記複数の段のうちの１つまたは複数の後続の段から前記複数のサブ回路へと反復的に追加することと、
前記複数のサブ回路のうちの２つ以上のサブ回路に接続されている、橋渡しするゲートを選択することと、
前記２つ以上のサブ回路をもつれ状態にするかどうかを決定することと、
前記２つ以上のサブ回路をもつれ状態にするよう決定することに応答して、前記橋渡しするゲートを前記２つ以上のサブ回路のうちの一方にのみ追加することと、を含む、方法。
【請求項１０】
前記２つ以上のサブ回路をもつれ状態にしないよう決定することに応答して、新しいサブ回路を作成し、前記橋渡しするゲートを前記新しいサブ回路に割り当てることを更に含む、請求項９に記載の方法。
【請求項１１】
前記新しいサブ回路を前記複数のサブ回路に追加することを更に含む、請求項９又は１０に記載の方法。
【請求項１２】
前記２つ以上のサブ回路を閉じることを更に含む、請求項９乃至１１のいずれかに記載の方法。
【請求項１３】
全てのゲートがサブ回路に割り当てられたかどうかを判定することを更に含む、請求項９乃至１２のいずれかに記載の方法。
【請求項１４】
前記複数のサブ回路についてサブ回路依存度を決定することを更に含む、請求項９乃至１３のいずれかに記載の方法。
【請求項１５】
前記サブ回路依存度に従って前記量子回路を実行することを更に含む、請求項１４に記載の方法。
【請求項１６】
１つまたは複数のプロセッサによって実行される、複数の量子ゲートを備える量子回路をシミュレートするための方法であって、
量子ゲートおよび対応するキュービットを含む量子サブ回路の組のデジタル記述を受信することと、
各キュービットにおよび非対角ユニタリ・ゲートごとの出力に、個別のテンソル・インデックスを割り当てることと、
テンソル・インデックス変数を各対角ユニタリ・ゲートの入力から出力へと伝播することと、
前記割り当てられたテンソル・インデックスを使用して各量子サブ回路を実行することと、を含む、方法。
【請求項１７】
各量子サブ回路を実行することは、前記量子サブ回路中の各ゲートについてテンソルの積を構成することを含む、請求項１６に記載の方法。
【請求項１８】
各量子サブ回路を実行することは、前記割り当てられたテンソル・インデックスを使用して前記テンソルの積を演算することを含む、請求項１６に記載の方法。
【請求項１９】
各量子サブ回路を実行することは、前記量子サブ回路の内部のテンソル・インデックスを合計することを含む、請求項１６に記載の方法。
【請求項２０】
前記量子サブ回路の組についてサブ回路依存度を決定することを更に含む、請求項１６乃至１９のいずれかに記載の方法。
【請求項２１】
前記サブ回路依存度に従って前記量子回路を実行することを更に含む、請求項２０に記載の方法。
【請求項２２】
コンピュータ・プログラムであって、
１つまたは複数のコンピュータ可読記憶媒体と、前記１つまたは複数のコンピュータ可読記憶媒体に保存されているプログラム命令と、を含み、前記プログラム命令は、
量子回路のデジタル記述を受信し、
前記量子回路の前記デジタル記述を複数の量子サブ回路へと分割し、前記複数の量子サブ回路の各量子サブ回路は１つまたは複数の量子ゲートを備え、
前記複数の量子サブ回路についてサブ回路依存度を決定し、
前記サブ回路依存度に従って前記複数の量子サブ回路をシミュレートして、前記複数の量子サブ回路の各量子サブ回路についてシミュレーション結果を生成する
ための命令を含み、
前記複数の量子サブ回路のうちの第１の量子サブ回路および第２の量子サブ回路は、共通のキュービットに適用される１つまたは複数のゲートを各々含み、
前記第１の量子サブ回路および前記第２の量子サブ回路は、もつれ状態のテンソル・インデックスを使用して互いに独立してシミュレートされる、コンピュータ・プログラム。
【請求項２３】
コンピュータ・プログラムであって、
１つまたは複数のコンピュータ可読記憶媒体と、前記１つまたは複数のコンピュータ可読記憶媒体に保存されているプログラム命令と、を含み、前記プログラム命令は、
複数の段を含む量子回路のデジタル記述を受信し、
初期段の各キュービットに対してサブ回路を作成して複数のサブ回路を生成し、
接続される橋渡ししないゲートを、接続される橋渡ししないゲートがそれ以上利用できなくなるまで、前記複数の段のうちの１つまたは複数の後続の段から前記複数のサブ回路へと反復的に追加し、
前記複数のサブ回路のうちの２つ以上のサブ回路に接続されている、橋渡しするゲートを選択し、
前記２つ以上のサブ回路をもつれ状態にするかどうかを決定し、
前記２つ以上のサブ回路をもつれ状態にするよう決定することに応答して、前記橋渡しするゲートを前記２つ以上のサブ回路のうちの一方にのみ追加する
ための命令を含む、コンピュータ・プログラム。
【請求項２４】
コンピュータ・プログラムであって、
１つまたは複数のコンピュータ可読記憶媒体と、前記１つまたは複数のコンピュータ可読記憶媒体に保存されているプログラム命令と、を含み、前記プログラム命令は、
量子ゲートおよび対応するキュービットを含む量子サブ回路の組のデジタル記述を受信し、
各キュービットにおよび非対角ユニタリ・ゲートごとの出力に、個別のテンソル・インデックスを割り当て、
テンソル・インデックス変数を各対角ユニタリ・ゲートの入力から出力へと伝播し、
前記割り当てられたテンソル・インデックスを使用して各量子サブ回路を実行する
ための命令を含む、コンピュータ・プログラム。
【国際調査報告】
2020534603.tif 000053
2020534603.tif 000054