IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

特許7583336シミュレーションプログラム、シミュレーション方法、および情報処理装置
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-06
(45)【発行日】2024-11-14
(54)【発明の名称】シミュレーションプログラム、シミュレーション方法、および情報処理装置
(51)【国際特許分類】
   G06N 10/70 20220101AFI20241107BHJP
【FI】
G06N10/70
【請求項の数】 8
(21)【出願番号】P 2023562098
(86)(22)【出願日】2021-11-22
(86)【国際出願番号】 JP2021042807
(87)【国際公開番号】W WO2023089831
(87)【国際公開日】2023-05-25
【審査請求日】2024-03-26
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】藤▲崎▼ 淳
【審査官】福西 章人
(56)【参考文献】
【文献】SUZUKI, Yasunari et al.,Efficient Simulation of Quantum Error Correction Under Coherent Error Based on the Nonunitary Free-F,PHYSICAL REVIEW LETTERS,Volume 119, Issue 19,American Physical Society,2017年11月09日,pp.190503-1~190503-5
【文献】HUANG, Cupjin et al.,Alibaba Cloud Quantum Development Platform: Surface Code Simulations with Crosstalk,2020年02月20日,pp.1-23,[オンライン]、[検索日: 2022.01.27], インターネット: <URL: https://arxiv.org/pdf/2002.08918.pdf>
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
(57)【特許請求の範囲】
【請求項1】
複数のデータ量子ビットと複数の補助量子ビットとを行方向および列方向のそれぞれに交互に配置した2次元格子を示す量子ビット情報を生成し、
前記量子ビット情報に対して、前記複数のデータ量子ビットのうちの第1のデータ量子ビットにおけるエラー発生を示すエラー情報を設定し、
前記量子ビット情報に対して、前記第1のデータ量子ビットに行方向または列方向に隣接する補助量子ビットの状態を初期値から反転させたエラー検知情報を設定し、
前記量子ビット情報に対して、前記エラー検知情報に基づく表面符号によるエラー訂正の対象となる第2のデータ量子ビットを示すエラー訂正情報を設定し、
前記2次元格子における一の行または一の列内の前記第1のデータ量子ビットと前記第2のデータ量子ビットとのいずれか一方に該当するデータ量子ビットの数に基づいて、論理エラーの発生の有無を判定する、
処理をコンピュータに実行させるシミュレーションプログラム。
【請求項2】
前記論理エラーの発生の有無の判定では、前記2次元格子における一の行または一の列内の前記第1のデータ量子ビットと前記第2のデータ量子ビットとのいずれか一方に該当するデータ量子ビットの数が奇数の場合に、前記論理エラーが発生していると判定する、
請求項1記載のシミュレーションプログラム。
【請求項3】
前記量子ビット情報の生成では、位相反転エラー検知用の補助量子ビットが配置される列とビット反転エラー検知用の補助量子ビットが配置される列とが交互に設けられた前記2次元格子を示す前記量子ビット情報を生成し、
前記論理エラーの発生の有無の判定では、前記2次元格子の4辺の境界のうち、前記ビット反転エラー検知用の補助量子ビットが配置された境界と平行な方向の一の行または一の列内の前記第1のデータ量子ビットと前記第2のデータ量子ビットとのいずれか一方に該当するデータ量子ビットの数に基づいて、位相反転エラーに起因する前記論理エラーの発生の有無を判定する、
請求項1または2に記載のシミュレーションプログラム。
【請求項4】
前記量子ビット情報の生成では、位相反転エラー検知用の補助量子ビットが配置される列とビット反転エラー検知用の補助量子ビットが配置される列とが交互に設けられた前記2次元格子を示す前記量子ビット情報を生成し、
前記論理エラーの発生の有無の判定では、前記2次元格子の4辺の境界のうち、前記位相反転エラー検知用の補助量子ビットが配置された境界と平行な方向の一の行または一の列内の前記第1のデータ量子ビットと前記第2のデータ量子ビットとのいずれか一方に該当するデータ量子ビットの数に基づいて、ビット反転エラーに起因する前記論理エラーの発生の有無を判定する、
請求項1から3までのいずれかに記載のシミュレーションプログラム。
【請求項5】
前記エラー情報の設定では、所定のエラー発生率に基づいて前記複数のデータ量子ビットの中から無作為に、エラーを発生させる前記第1のデータ量子ビットを決定し、
前記エラー情報の設定、前記エラー検知情報の設定、前記エラー訂正情報の設定、前記論理エラーの発生の有無の判定を、所定回数繰り返し実行する、
請求項1から4までのいずれかに記載のシミュレーションプログラム。
【請求項6】
前記コンピュータに、
前記所定回数の前記論理エラーの発生の有無の判定結果に基づいて、論理エラー発生確率を算出する、
処理を実行させる請求項5記載のシミュレーションプログラム。
【請求項7】
複数のデータ量子ビットと複数の補助量子ビットとを行方向および列方向のそれぞれに交互に配置した2次元格子を示す量子ビット情報を生成し、
前記量子ビット情報に対して、前記複数のデータ量子ビットのうちの第1のデータ量子ビットにおけるエラー発生を示すエラー情報を設定し、
前記量子ビット情報に対して、前記第1のデータ量子ビットに行方向または列方向に隣接する補助量子ビットの状態を初期値から反転させたエラー検知情報を設定し、
前記量子ビット情報に対して、前記エラー検知情報に基づく表面符号によるエラー訂正の対象となる第2のデータ量子ビットを示すエラー訂正情報を設定し、
前記2次元格子における一の行または一の列内の前記第1のデータ量子ビットと前記第2のデータ量子ビットとのいずれか一方に該当するデータ量子ビットの数に基づいて、論理エラーの発生の有無を判定する、
処理をコンピュータが実行するシミュレーション方法。
【請求項8】
複数のデータ量子ビットと複数の補助量子ビットとを行方向および列方向のそれぞれに交互に配置した2次元格子を示す量子ビット情報を生成し、前記量子ビット情報に対して、前記複数のデータ量子ビットのうちの第1のデータ量子ビットにおけるエラー発生を示すエラー情報を設定し、前記量子ビット情報に対して、前記第1のデータ量子ビットに行方向または列方向に隣接する補助量子ビットの状態を初期値から反転させたエラー検知情報を設定し、前記量子ビット情報に対して、前記エラー検知情報に基づく表面符号によるエラー訂正の対象となる第2のデータ量子ビットを示すエラー訂正情報を設定し、前記2次元格子における一の行または一の列内の前記第1のデータ量子ビットと前記第2のデータ量子ビットとのいずれか一方に該当するデータ量子ビットの数に基づいて、論理エラーの発生の有無を判定する処理部、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、シミュレーションプログラム、シミュレーション方法、および情報処理装置に関する。
【背景技術】
【0002】
量子コンピュータの計算は複数の量子ビットに対する初期化、ゲート操作、測定処理を行うことで実現される。量子コンピュータでは、このような量子ビットへの操作の過程で環境ノイズなどにより量子ビットにエラー(物理エラー)が発生する。そこで量子コンピュータでは、エラー量子ビットとエラー内容特定のため、従来型の計算機(古典コンピュータとも呼ばれる)と同様に量子ビットの冗長化が行われる。
【0003】
冗長化させた量子ビットを用いてエラー量子ビットとエラー内容を特定する手法の1つに表面符号がある。表面符号では、2次元格子状にデータ量子ビットと補助量子ビットとが交互に並べられる。格子状に配置された複数の量子ビット(データ量子ビットと補助量子ビット)のうちのデータ量子ビットの状態が1つの論理量子ビットに符号化される。補助量子ビットは、1列ごとにXエラー検知用とZエラー検知用のどちらかとして使用される。表面符号を行う場合、量子コンピュータは、最初に論理量子状態を適切に初期化し、エラー検知の際、1つの補助量子ビットと周囲4つのデータ量子ビットとの間のゲート操作を行い、補助量子ビットの測定を行う。量子コンピュータは、補助量子ビットの値に基づいてXエラーまたはZエラーを検知する。そして量子コンピュータは、エラーの種類を示す情報と、エラー箇所であると特定したデータ量子ビットの位置情報を用いて、量子ビットへのエラー訂正処理のゲート操作を行う。
【0004】
量子コンピュータにおける誤り訂正に関する技術としては、例えばシステムサイズに依存しない量子誤り訂正方法が提案されている。また量子アルゴリズムを実行するキュービットの配列の誤りを判定および訂正する方法も提案されている。さらに、少なくとも1つのフラグ量子ビットからの測定値に基づいて、複数の物理量子ビットの1つ以上における故障耐性の量子エラーを訂正する技術も提案されている。
【先行技術文献】
【特許文献】
【0005】
【文献】特開2014-241484号公報
【文献】特表2020-535690号公報
【文献】米国特許出願公開第2021/0019223号明細書
【発明の概要】
【発明が解決しようとする課題】
【0006】
1つの論理量子ビットを構成する複数の量子ビットのうちの2以上の量子ビットにエラーが発生したとき、表面符号を用いてもエラー訂正に失敗する場合がある。このようなエラー訂正の失敗は、論理エラーと呼ばれる。
【0007】
表面符号では、1つの論理量子ビットを表す格子内の量子ビット数に応じて、論理エラーの発生確率が変わる。論理エラーの発生確率は、環境ノイズなどによる量子ビットのエラーの発生率によっても変わる。そこで表面符号による量子誤り訂正の性能を評価するため、古典コンピュータ(ノイマン型コンピュータとも呼ばれる)を用いて表面符号による誤り訂正のシミュレーションを行うことが考えられる。量子コンピュータ実機ではデータ量子ビットそのものを測定しないと論理エラーかどうか判定できないが、シミュレーションであればエラーの発生箇所があらかじめ分かる。そのため所定の条件での表面符号による誤り訂正のシミュレーションを実施することで、その条件での論理エラーの発生の有無を判断できる。これにより、量子コンピュータに表面符号を適用する場合における1論理量子ビット当たりの適切な量子ビット数などを調べることができる。
【0008】
しかし、従来の表面符号による誤り訂正シミュレーションにおける論理エラーの発生の有無の判定処理は、1論理量子ビット当たりの量子ビット数が多くなる程、計算量が指数関数的に増加する。そのため、大規模な量子コンピュータについての表面符号による誤り訂正シミュレーションが困難となっている。
【0009】
1つの側面では、本件は、論理エラーの発生の有無を効率的に判定できるようにすることを目的とする。
【課題を解決するための手段】
【0010】
1つの案では、以下の処理をコンピュータに実行させるシミュレーションプログラムが提供される。
コンピュータは、複数のデータ量子ビットと複数の補助量子ビットとを行方向および列方向のそれぞれに交互に配置した2次元格子を示す量子ビット情報を生成する。コンピュータは、量子ビット情報に対して、複数のデータ量子ビットのうちの第1のデータ量子ビットにおけるエラー発生を示すエラー情報を設定する。コンピュータは、量子ビット情報に対して、第1のデータ量子ビットに行方向または列方向に隣接する補助量子ビットの状態を初期値から反転させたエラー検知情報を設定する。コンピュータは、量子ビット情報に対して、エラー検知情報に基づく表面符号によるエラー訂正の対象となる第2のデータ量子ビットを示すエラー訂正情報を設定する。そしてコンピュータは、2次元格子における一の行または一の列内の第1のデータ量子ビットと第2のデータ量子ビットとのいずれか一方に該当するデータ量子ビットの数に基づいて、論理エラーの発生の有無を判定する。
【発明の効果】
【0011】
1態様によれば、論理エラーの発生の有無を効率的に判定できるようにする。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
【図面の簡単な説明】
【0012】
図1】第1の実施の形態に係るシミュレーション方法の一例を示す図である。
図2】表面符号シミュレーションのコンピュータのハードウェアの一例を示す図である。
図3】量子ビットを説明する図である。
図4】量子回路の一例を示す図である。
図5】量子ビットにおけるエラー発生状況の一例を示す図である。
図6】量子ビットの冗長化の一例を示す図である。
図7】補助量子ビットを用いた測定の一例を示す図である。
図8】表面符号を行うための量子ビットの構成の一例を示す図である。
図9】Xエラー検知のゲート操作の一例を示す図である。
図10】Zエラー検知のゲート操作の一例を示す図である。
図11】論理Z演算子Lzと論理X演算子Lxの数学的表現を説明する図である。
図12】Xエラー検知の一例を示す図である。
図13】エラー箇所特定の一例を示す図である。
図14】エラー発生箇所を一意に特定できない場合の一例を示す図である。
図15】エラーが発生した箇所とは別のデータ量子ビットを訂正することによるエラー訂正の一例を示す図である。
図16】エラー訂正成功パターンの例を示す図である。
図17】誤訂正による論理エラーの一例を示す図である。
図18】エラーチェインの探索による論理エラー判定の一例を示す図である。
図19】2次元格子1列分のデータ量子ビットの状態データに基づく論理エラー判定の一例を示す図である。
図20】縦一列の反転量子ビット数が奇数の場合に論理エラーとなることを説明する図である。
図21】論理エラー判定に用いられるデータ量子ビットの一例を示す図である。
図22】表面符号シミュレーションを実施するためのコンピュータの機能を示すブロック図である。
図23】表面符号シミュレーションを利用した論理エラー判定処理の手順の一例を示すフローチャートである。
図24】シミュレーション条件の一例を示す図である。
図25】表面符号シミュレーションの処理の手順の一例を示すフローチャートである。
図26】論理エラー(Zエラー)判定処理の手順の一例を示すフローチャートである。
図27】論理エラー(Xエラー)判定処理の手順の一例を示すフローチャートである。
図28】2次元格子の1辺のデータ量子ビット数と探索回数との関係を示すグラフである。
【発明を実施するための形態】
【0013】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第1の実施の形態〕
第1の実施の形態は、量子コンピュータで発生する量子ビットのエラーを表面符号によりエラー訂正処理のシミュレーションを実行した場合における論理エラーの発生の有無を効率的に判定するシミュレーション方法である。
【0014】
図1は、第1の実施の形態に係るシミュレーション方法の一例を示す図である。図1には、シミュレーション方法の実施に用いる情報処理装置10が示されている。情報処理装置10は、例えばシミュレーションプログラムを実行することにより、シミュレーション方法を実施することができる。
【0015】
情報処理装置10は、記憶部11と処理部12とを有する。記憶部11は、例えば情報処理装置10が有するメモリまたはストレージ装置である。処理部12は、例えば情報処理装置10が有するプロセッサまたは演算回路である。
【0016】
記憶部11は、複数のデータ量子ビットと複数の補助量子ビットとを行方向および列方向のそれぞれに交互に配置した2次元格子を示す量子ビット情報1を記憶する。2次元格子では、矩形の領域内に量子ビットが等間隔で配置されており、矩形の4辺に沿って配置された量子ビットが2次元格子の境界となる。量子ビット情報1に示される2次元格子は、例えば位相反転エラー(Zエラー)検知用の補助量子ビットが配置される列とビット反転エラー(Xエラー)検知用の補助量子ビットが配置される列とが交互に設けられている。このような量子ビット情報1に示される2次元格子では、位相反転エラー検知用の補助量子ビットが配置される行とビット反転エラー検知用の補助量子ビットが配置される行も交互に設けられている。
【0017】
処理部12は、ユーザからのシミュレーション条件の入力を受け付け、そのシミュレーション条件に従って量子ビット情報1を生成する。シミュレーション条件には、例えば2次元格子の行方向と列方向それぞれの量子ビット数、データ量子ビットにおけるエラー発生率などが含められる。処理部12は、シミュレーション条件に基づいて量子ビット情報1を生成する。そして処理部12は、生成した量子ビット情報1を記憶部11に格納する。
【0018】
処理部12は、量子ビット情報1に対して、複数のデータ量子ビットのうちの第1のデータ量子ビットにおけるエラー発生を示すエラー情報を設定する。例えば処理部12は、所定のエラー発生率に基づいて複数のデータ量子ビットの中から無作為(ランダム)に、エラーを発生させる第1のデータ量子ビットを決定する。第1のデータ量子ビットに発生させるエラーは、意図しないデータ量子ビットの状態の反転(ビット反転または位相反転)である。図1の例では、ストライプ柄のハッチングによって、第1のデータ量子ビットを示している。
【0019】
次に処理部12は、量子ビット情報1に対して、第1のデータ量子ビットに行方向または列方向に隣接する補助量子ビットの状態を初期値から反転させたエラー検知情報を設定する。この際、処理部12は、補助量子ビットの状態を、隣接する第1のデータ量子ビットの数の回数だけ反転させる。そのため、例えば2つの第1のデータ量子ビットに隣接する補助量子ビットは状態が2回反転し、初期状態に戻る。図1の例では、チェック柄のハッチングによって、初期値から反転した状態となった補助処理ビットが示されている。
【0020】
さらに処理部12は、量子ビット情報1に対して、エラー検知情報に基づく表面符号によるエラー訂正の対象となる第2のデータ量子ビットを示すエラー訂正情報を設定する。処理部12は、例えば状態が反転した補助量子ビットの配置に基づいて、エラー検知を行ったときにその補助量子ビットが反転するような、データ量子ビットのエラー発生のパターンを求める。そして処理部12は、そのエラー発生のパターンでエラーが発生しているとされているデータ量子ビットを、エラー訂正の対象となる第2のデータ量子ビットとする。図1の例では、エラー訂正対象のデータ量子ビットの矩形を二重線で表している。
【0021】
なお、第2のデータ量子ビットの配置パターン(エラー訂正パターン)は、複数のパターンがあり得る。図1の例では3つのエラー訂正パターンが示されている。
処理部12は、2次元格子における一の行または一の列内の第1のデータ量子ビットと第2のデータ量子ビットとのいずれか一方に該当するデータ量子ビットの数に基づいて、論理エラーの発生の有無を判定する。例えば処理部12は、2次元格子における一の行または一の列内の第1のデータ量子ビットと第2のデータ量子ビットとのいずれか一方に該当するデータ量子ビット(反転量子ビット)の数が奇数の場合に、論理エラーが発生していると判定する。なお第1のデータ量子ビットと第2のデータ量子ビットとの両方に該当するデータ量子ビットは、エラーが発生したものの正しく訂正されたデータ量子ビットであり、反転量子ビットには含まれない。
【0022】
例えば図1に示す例では、第5列内の反転量子ビットの数に基づいて、論理エラーの有無が判定されている。例えば1つ目のエラー訂正パターンでは、反転量子ビット数が「0」(偶数)であり、論理エラーは発生していないと判定される。また2つ目のエラー訂正パターンでは、反転量子ビット数が「2」(偶数)であり、論理エラーは発生していないと判定される。3つ目のエラー訂正パターンでは、反転量子ビット数が「1」(奇数)であり、論理エラーが発生していると判定される。
【0023】
このように、ある一行または一列における反転量子ビットの数によって論理エラーの発生の有無を判定することができ、表面符号のシミュレーション実行時の論理エラーの発生の有無の判定を効率的に行うことができる。
【0024】
なお、位相反転エラー検知用の補助量子ビットが配置された行とビット反転エラーが配置された行とが交互に設けられているとき、2次元格子の4辺の境界には、位相反転エラー検知用の補助量子ビットが配置された境界(スムーズ境界)と、ビット反転エラー検知用の補助量子ビットが配置された境界(ラフ境界)とがある。処理部12は、ラフ境界と平行な方向の一の行または一の列内の第1のデータ量子ビットと第2のデータ量子ビットとのいずれか一方に該当するデータ量子ビットの数に基づいて、位相反転エラーに起因する論理エラーの発生の有無を判定する。また処理部12は、スムーズ境界と平行な方向の一の行または一の列内の第1のデータ量子ビットと第2のデータ量子ビットとのいずれか一方に該当するデータ量子ビットの数に基づいて、ビット反転エラーに起因する論理エラーの発生の有無を判定する。
【0025】
このようにして、位相反転エラーまたはビット反転エラーそれぞれに起因する論理エラーの有無について個別に判定することができる。
なお、所定のエラー発生率に基づいて複数のデータ量子ビットの中から無作為にエラーを発生させて第1のデータ量子ビットを決定する場合、論理エラーが発生するか否かは確率的に決まる。そこで処理部12は、エラー情報の設定、エラー検知情報の設定、エラー訂正情報の設定、論理エラーの発生の有無の判定を、所定回数繰り返して実行してもよい。この場合、処理部12は、例えば、所定回数の論理エラーの発生の有無の判定結果に基づいて、論理エラー発生確率を算出する。これによりデータ量子ビットのエラー発生率に応じた論理エラーの発生確率が得られる。
【0026】
〔第2の実施の形態〕
次に第2の実施の形態について説明する。第2の実施の形態は、量子コンピュータにおいてランダムに発生するエラーに対する表面符号による誤り訂正のシミュレーション(以下、表面符号シミュレーションと呼ぶ)を実行し、論理エラーの発生の有無を効率的に判定するコンピュータである。
【0027】
図2は、表面符号シミュレーションのコンピュータのハードウェアの一例を示す図である。コンピュータ100は、プロセッサ101によって装置全体が制御されている。プロセッサ101には、バス109を介してメモリ102と複数の周辺機器が接続されている。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU(Central Processing Unit)、MPU(Micro Processing Unit)、またはDSP(Digital Signal Processor)である。プロセッサ101がプログラムを実行することで実現する機能の少なくとも一部を、ASIC(Application Specific Integrated Circuit)、PLD(Programmable Logic Device)などの電子回路で実現してもよい。
【0028】
メモリ102は、コンピュータ100の主記憶装置として使用される。メモリ102には、プロセッサ101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ102には、プロセッサ101による処理に利用する各種データが格納される。メモリ102としては、例えばRAM(Random Access Memory)などの揮発性の半導体記憶装置が使用される。
【0029】
バス109に接続されている周辺機器としては、ストレージ装置103、GPU(Graphics Processing Unit)104、入力インタフェース105、光学ドライブ装置106、機器接続インタフェース107およびネットワークインタフェース108がある。
【0030】
ストレージ装置103は、内蔵した記録媒体に対して、電気的または磁気的にデータの書き込みおよび読み出しを行う。ストレージ装置103は、コンピュータ100の補助記憶装置として使用される。ストレージ装置103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ストレージ装置103としては、例えばHDD(Hard Disk Drive)やSSD(Solid State Drive)を使用することができる。
【0031】
GPU104は画像処理を行う演算装置であり、グラフィックコントローラとも呼ばれる。GPU104には、モニタ21が接続されている。GPU104は、プロセッサ101からの命令に従って、画像をモニタ21の画面に表示させる。モニタ21としては、有機EL(Electro Luminescence)を用いた表示装置や液晶表示装置などがある。
【0032】
入力インタフェース105には、キーボード22とマウス23とが接続されている。入力インタフェース105は、キーボード22やマウス23から送られてくる信号をプロセッサ101に送信する。なお、マウス23は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【0033】
光学ドライブ装置106は、レーザ光などを利用して、光ディスク24に記録されたデータの読み取り、または光ディスク24へのデータの書き込みを行う。光ディスク24は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク24には、DVD(Digital Versatile Disc)、DVD-RAM、CD-ROM(Compact Disc Read Only Memory)、CD-R(Recordable)/RW(ReWritable)などがある。
【0034】
機器接続インタフェース107は、コンピュータ100に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース107には、メモリ装置25やメモリリーダライタ26を接続することができる。メモリ装置25は、機器接続インタフェース107との通信機能を搭載した記録媒体である。メモリリーダライタ26は、メモリカード27へのデータの書き込み、またはメモリカード27からのデータの読み出しを行う装置である。メモリカード27は、カード型の記録媒体である。
【0035】
ネットワークインタフェース108は、ネットワーク20に接続されている。ネットワークインタフェース108は、ネットワーク20を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。ネットワークインタフェース108は、例えばスイッチやルータなどの有線通信装置にケーブルで接続される有線通信インタフェースである。またネットワークインタフェース108は、基地局やアクセスポイントなどの無線通信装置に電波によって通信接続される無線通信インタフェースであってもよい。
【0036】
コンピュータ100は、以上のようなハードウェアによって、第2の実施の形態の処理機能を実現することができる。なお、第1の実施の形態に示した情報処理装置10も、図2に示したコンピュータ100と同様のハードウェアにより実現することができる。
【0037】
コンピュータ100は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第2の実施の形態の処理機能を実現する。コンピュータ100に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、コンピュータ100に実行させるプログラムをストレージ装置103に格納しておくことができる。プロセッサ101は、ストレージ装置103内のプログラムの少なくとも一部をメモリ102にロードし、プログラムを実行する。またコンピュータ100に実行させるプログラムを、光ディスク24、メモリ装置25、メモリカード27などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ101からの制御により、ストレージ装置103にインストールされた後、実行可能となる。またプロセッサ101が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【0038】
以下、表面符号シミュレーションの説明の前に、図3図17を参照し、量子コンピュータにおける表面符号によるエラー訂正と論理エラーの発生原因について説明する。
図3は、量子ビットを説明する図である。量子ビットとは、従来のコンピュータでの情報量の最小単位「ビット」(古典ビット)に対応する量子情報の最小単位である。量子ビットは、「0」と「1」の量子力学的な重ね合わせ状態(量子状態)を取る。量子ビットの量子状態は、数学的には以下の式(1)に示すような2次元ベクトルで表され、|0>,|1>がそれぞれ古典ビットの「0」と「1」の状態に対応する。
【0039】
【数1】
【0040】
αとβとを実数φ,θ、虚数単位iを用いて式(2)のように書き直すと、量子ビットは図3に示すブロッホ球31で表現される。
【0041】
【数2】
【0042】
古典ビットでは「0」か「1」の状態だけなのに対し、量子ビットはブロッホ球31面上の任意の状態を取ることができる。量子ゲート方式の量子コンピュータでは、量子ビットに対してゲート操作を行うことで、目的に沿った計算を進めることができる。
【0043】
ゲート操作は量子状態を変更する操作であり、数学的には量子状態のベクトルに行列演算子を作用させることとして表現される。ゲート操作としては、例えば量子ビットのビット反転を行うXゲートがある。Xゲートによる操作を数式で表すと以下の通りである。
【0044】
【数3】
【0045】
また量子ビットの位相反転を行うZゲートによる操作を数式で表すと以下の通りである。
【0046】
【数4】
【0047】
Xゲート操作、Zゲート操作それぞれに対応する行列演算子は、パウリ演算子として知られている。パウリ演算子としては、以下の3つの行列演算子がある。
【0048】
【数5】
【0049】
パウリ演算子の積に関しては(XY=-YX,YZ=-ZY,ZX=-XZ)という性質がある。このような関係が満たされることは、反交換関係を満たすと呼ばれる。また、マイナス符号を伴わない関係(例えば恒等演算子Iとの関係XI=IX)を満たすことは、交換関係を満たすと呼ばれる。
【0050】
ゲート操作に用いる演算子としては、他にHadamard演算子がある。Hadamard演算子は、|0>と|1>に重ね合わせ状態を作り出すゲート操作に用いられる。Hadamard演算子は、以下の式(6)で表される。
【0051】
【数6】
【0052】
以上の行列演算子は、1量子ビットに作用する行列演算子である。2量子ビットに作用する演算子もある。
2量子ビットの状態は1量子ビット状態のテンソル積「|a>×|b>」(テンソル積×は丸の中に×の記号)と表され、通常|ab>と書かれるこれは2×2の4次元ベクトルである。2量子ビットに作用する行列演算子としては、例えばCNOT演算子がある。
【0053】
CNOT演算子は、片方の量子ビット(コンロトロール量子ビット)が1のとき、もう片方の量子ビット(ターゲット量子ビット)をビット反転させる(|10>→|11>)。2量子ビットの状態が4次元ベクトルのため、対応する行列演算子は4×4次元となる。CNOT演算子は、以下の式で表される。
【0054】
【数7】
【0055】
複数の量子ビットに対するゲート操作をまとめて表現するために量子回路が用いられる。量子回路では、量子ビットの状態遷移が線で表され、各ゲート操作が対応する記号で表される。
【0056】
図4は、量子回路の一例を示す図である。量子回路32の横線それぞれが量子ビットに対応する。横線の左側に量子ビットへの入力が示されている。各横線の上に、対応する量子ビットに対するゲート操作を示す記号が、時系列順に横方向(左から右)に並べられている。横線の右側のメータのような記号32a,32bは測定操作を示している。
【0057】
量子回路32に示されているゲート操作のうち、例えば矩形で囲まれたXの記号32cは、パウリ演算子「X」(Xゲート操作)を示している。矩形で囲まれたZの記号32dは、パウリ演算子「Z」(Zゲート操作)を示している。矩形で囲まれたHの記号32eは、Hadamard演算子「H」(Hadamardゲート操作)を示している。
【0058】
2量子ビットに対するゲート操作は、複数の横線を跨がって記載される。例えばCNOT演算子CXに対応するゲート操作を示す記号32f,32gは、中に+を有する白丸と黒丸とを線で接続したものである。黒丸はコントロール量子ビットの横線の上に配置され、中に+を有する白丸はターゲット量子ビットの横線上に配置される。
【0059】
例えば図4に示す量子回路32は、状態|ψφ>の2つの量子ビットにゲート操作「CX(2,1)(1)X(1,2)(2)(1)」を行うことを示している。ゲート操作を示す式では右から左の順で作用させる行列演算子が記載される。行列演算子の右下の添字は作用させる量子ビットの番号である。
【0060】
量子コンピュータでは、量子回路32で示されるゲート操作が順番に実行される。その際、量子ビットにエラーが発生する可能性がある。正しい計算結果を得るには、エラーの発生を検出し、そのエラーを訂正できることが重要となる。
【0061】
図5は、量子ビットにおけるエラー発生状況の一例を示す図である。量子ビット33はさまざまなノイズの影響を受ける。ノイズの種類としては、環境ノイズ、量子ビット操作時のノイズ、他の量子ビットからの干渉などがある。量子ビット33はノイズの影響で状態が意図せずに変化する可能性がある。このような意図しない状態の変化が量子ビットのエラーである。量子ビットに発生するエラーの種類は以下の2種類に分類される。
・ビット反転エラー(Xエラー):|0>→|1>、|1>→|0>
・位相反転エラー(Zエラー):|+>→|->、|->→|+>
ビット反転エラーは、数学的には量子状態にパウリ演算子Xを作用させることと同じである。同様に位相反転エラーは、量子状態にパウリ演算子Zを作用させることと同じである。
【0062】
すなわち、量子ビットのエラーはエラーと同じパウリ演算子(X,Z)を作用させることで訂正が可能である。このような操作を量子エラー訂正という。例えばXエラーが発生した量子ビットに対するパウリ演算子Xによる訂正を行う場合を想定する。Xエラーは以下の式(8)で表され、訂正のゲート操作は式(9)で表される。
【0063】
【数8】
【0064】
【数9】
【0065】
エラー発生と訂正とにより、量子状態は「|0>→|1>→|0>」のように変化する。このようなエラー訂正を行うには、エラーが発生した量子ビット(エラー量子ビット)とエラーの内容(ビット反転(Xエラー)なのか位相反転(Zエラー)なのか)を特定することが求められる。そこでエラー量子ビットの特定とエラー内容特定のため、量子ビットの冗長化が行われる。
【0066】
図6は、量子ビットの冗長化の一例を示す図である。図6には、8量子ビットを用いた冗長化の例が示されている。量子ビットを冗長化した場合、1つの量子ビット34で表されていた量子状態|ψ>が、論理量子ビット35による論理量子状態|ψ>Lで表される。論理量子ビット35は、複数の量子ビット35a~35hで構成される。
【0067】
ここで、論理量子ビット35を構成する1つの量子ビット35hにエラーが発生したものとする。この場合、エラー量子ビットとエラー内容との特定処理により、エラー量子ビットとエラー内容が特定される。
【0068】
量子ビット35hがエラー量子ビットであると正しく特定され、エラー内容も正しく特定された場合、量子ビット35hにエラー訂正のゲート操作が行われる。エラー訂正により、論理量子ビット35の状態が、エラーが発生していない場合の状態に訂正される。
【0069】
図6の例では、エラー量子ビットを正しく特定できたものとしているが、エラー量子ビットの特定は簡単ではない。エラー量子ビットの特定には、論理量子ビット35を構成する量子ビット35a~35hの状態に関する情報が用いられるが、量子ビットを直接測定すると量子状態が壊れて計算を続けられなくなってしまう。そのため補助量子ビットが導入され、補助量子ビットの状態を測定することで論理量子ビット35を構成する量子ビット35a~35hの状態に関する情報が取得される。
【0070】
図7は、補助量子ビットを用いた測定の一例を示す図である。量子ビット36の状態を補助量子ビット37にコピーすることはできない。そこで量子ビット36と補助量子ビット37とに対して2量子ビット操作が行われる。2量子ビット操作により、量子ビット36の状態に応じて補助量子ビット37の状態を変化させる。補助量子ビット37の状態を測定することで、補助量子ビット37の初期状態からの変化を検知できる。補助量子ビット37が初期状態から変化したか否かにより、量子ビット36の状態を知ることができる。
【0071】
補助量子ビットを用いて得られる量子ビットの状態に基づいてエラー量子ビットを特定する手法として表面符号がある。表面符号は、量子エラー訂正における代表的な符号化(冗長化)の手法である。
【0072】
図8は、表面符号を行うための量子ビットの構成の一例を示す図である。図8の例では、量子ビットが2次元の格子状に並べられている。データ量子ビット40a~40fと補助量子ビット41a~41d,42a~42dは行方向と列方向のそれぞれにおいて交互に並べられている。補助量子ビット41a~41d,42a~42dは、Xエラー検知用の補助量子ビット41a~41dとZエラー検知用の補助量子ビット42a~42dとに分けられる。そして1列ごとにXエラー検知用の補助量子ビット41a~41dとZエラー検知用の補助量子ビット42a~42dとが交互に配置されている。
【0073】
なお図8に示す量子ビットは、表面符号によるエラー訂正に用いる量子ビットの一部である。表面符号によるエラー訂正を行う場合、エラー訂正に用いる全量子ビットを含む2次元格子の1辺の量子数(データ量子ビットと補助量子ビットの合計)は奇数であり、4つの角に配置されるのはデータ量子ビットである(図11参照)。
【0074】
最初に論理量子状態を適切に初期化し、エラー検知の際、1つの補助量子ビットと周囲4つのデータ量子ビットとの間にゲート操作(2量子ビット操作)を行い、補助量子ビットの測定を行うことで、エラーの有無が検知できる。
【0075】
図9は、Xエラー検知のゲート操作の一例を示す図である。例えば補助量子ビット41dを用いて、補助量子ビット41dに隣接するデータ量子ビット40d,40e,40h,40fのいずれかにおけるエラーを検知する場合を想定する。ここでデータ量子ビット40dの識別子を「a」、データ量子ビット40eの識別子を「b」、データ量子ビット40hの識別子を「c」、データ量子ビット40fの識別子を「d」、補助量子ビット41dの識別子を「e」とする。
【0076】
これらの量子ビットに対して、量子回路43に示すようなゲート操作を行うことで、データ量子ビット40d,40e,40h,40fのXエラー検知が可能となる。量子回路43には、データ量子ビット40d,40e,40h,40fそれぞれをコントロール量子ビットとし、補助量子ビット41dをターゲット量子ビットとするCNOTゲート操作を行うことが示されている。このようなゲート操作により、データ量子ビット40d,40e,40h,40fのうちの1つでXエラーが発生していた場合、補助量子ビット41dが初期状態から変化する。図6の例では、補助量子ビット41dの初期状態は|0>であるため、補助量子ビット41dの測定により|1>の状態が検知された場合には、データ量子ビット40d,40e,40h,40fのいずれかでXエラーが発生していると判定できる。
【0077】
図10は、Zエラー検知のゲート操作の一例を示す図である。例えば補助量子ビット42aを用いて、補助量子ビット42aに隣接するデータ量子ビット40a,40c,40d,40eのいずれかにおけるエラーを検知する場合を想定する。ここでデータ量子ビット40aの識別子を「g」、データ量子ビット40cの識別子を「f」、補助量子ビット42aの識別子を「h」とする。図9に示したように、データ量子ビット40dの識別子は「a」であり、データ量子ビット40eの識別子は「b」である。
【0078】
これらの量子ビットに対して、量子回路44に示すようなゲート操作を行うことで、データ量子ビット40a,40c,40d,40eのZエラー検知が可能となる。量子回路44には、まず補助量子ビット42aにHadamardゲート操作を行うことが示されている。その後、データ量子ビット40a,40c,40d,40eそれぞれをターゲット量子ビットとし、補助量子ビット42aをコントロール量子ビットとするCNOTゲート操作が行われる。さらに補助量子ビット42aにHadamardゲート操作が行われる。なお量子回路44に示される状況では、Zエラーが発生したデータ量子ビットと補助量子ビット42aとの間のCNOTゲート操作では、通常とは逆に、ターゲット量子ビットの状態に応じてコントロール量子ビットである補助量子ビット42aの状態が変化する。
【0079】
このようなゲート操作により、データ量子ビット40a,40c,40d,40eのうちの1つでZエラーが発生していた場合、補助量子ビット42aが初期状態から変化する。図6の例では、補助量子ビット42aの初期状態は|0>であるため、補助量子ビット42aの測定により|1>の状態が検知された場合には、データ量子ビット40a,40c,40d,40eのいずれかでZエラーが発生していると判定できる。
【0080】
次に、データ量子ビットの初期化について説明する。論理量子状態|ψ>Lを任意に決めると、図9または図10に示したエラー検知のためのゲート操作によって、エラーが無い場合にもデータ量子ビットと補助量子ビットの状態が変化してしまう。それを回避するため、論理量子状態|ψ>Lは、スタビライザ演算子の固有状態(固有値は+1もしくは-1)になるように初期化される。スタビライザ演算子は、補助量子ビットの周囲4つのデータ量子ビットに作用するZ演算子またはX演算子の積である。
【0081】
例えば図9に示すXエラー検知用のスタビライザ演算子は「Z(i1)(i2)(i3)(i4)|ψ>L=±|ψ>L」となる。iはXエラー検知用の補助量子ビットのインデックスである。iの右の数字は、補助量子ビットの周囲のデータ量子ビットを区別する数字である。例えば補助量子ビットを基準として、上のデータ量子ビットが「1」、左のデータ量子ビットが「2」、下のデータ量子ビットが「3」、右のデータ量子ビットが「4」となる。例えばZ(i1)は、i番目の補助量子ビットの上のデータ量子ビットに作用するZ演算子を示している。
【0082】
また図10に示すZエラー検知用のスタビライザ演算子は「X(j1)(j2)(j3)(j4)|ψ>L=±|ψ>L」となる。jはZエラー検知用の補助量子ビットのインデックスである。jの右の数字は、補助量子ビットの周囲のデータ量子ビットを区別する数字である。
【0083】
このように論理量子状態|ψ>Lの初期化により、補助量子ビットを測定しても量子ビットの状態は影響を受けない。
次に論理量子ビットの計算について説明する。エラー検知は計算の合間に頻繁に行われる処理である。そのため、論理量子状態は初期状態だけでなく、計算中もスタビライザ演算子の固有状態に保たれていなければならない。従って論理量子ビットに対する操作を行う場合、スタビライザ演算子の固有状態を壊すことなく論理量子状態を変化させる演算子が用いられる。それらの演算子は論理演算子と呼ばれている。
【0084】
論理演算子には論理Z演算子Lz、論理X演算子Lxなどがある。これらの論理演算子は以下の性質を満たす。
第1の性質は、論理演算子はすべてのスタビライザ演算子と交換関係を満たすことである。例えば論理Z演算子Lzに関し、スタビライザ演算子をS、論理量子状態|ψ>LをSの固有状態(S|ψ>L=|ψ>L)とする。この場合、交換関係SLz=LzSより、SLz|ψ>L=LzS|ψ>L=Lz|ψ>Lとなる。Lz|ψ>Lは元の|ψ>Lとは異なるがSの固有状態に保たれている。
【0085】
第2の性質は、Lx,Lzは反交換関係を満たすことである。すなわち「LxLz=-LzLx」が満たされる。
図11は、論理Z演算子Lzと論理X演算子Lxの数学的表現を説明する図である。論理量子ビットを構成する格子状の量子ビットの配列における左右および上下の境界のうち、Xエラー検出用の補助量子ビットが並んでいる境界はラフ境界45,46と呼ばれる。またZエラー検出用の補助量子ビットが並んでいる境界はスムーズ境界47,48と呼ばれる。
【0086】
論理Z演算子Lzは、数学的には、一方のラフ境界45から反対側のラフ境界46までのデータ量子ビット分のZ演算子の積で表される。論理Z演算子Lzは、論理量子状態を位相反転させる(Lz|0>L=|0>L、Lz|1>L=-|1>L)。
【0087】
論理X演算子Lxは、数学的には、一方のスムーズ境界47から反対側のスムーズ境界48までのデータ量子ビット分のX演算子の積で表される。論理X演算子Lxは、論理量子状態をビット反転させる(Lx|0>L=|1>L、Lx|1>L=|0>L)。
【0088】
次に表面符号によるエラー検知方法について説明する。表面符号において、1つのデータ量子ビットにXエラーが起こった場合、状態|ψ>Lはスタビライザ演算子の固有値が異なる固有状態|ψ’>Lに変化する。
【0089】
図12は、Xエラー検知の一例を示す図である。例えば|ψ>Lが固有値+1の場合、i番目の補助量子ビットの周囲のデータ量子ビットの1つでXエラーが発生すると「|ψ’>L=X(i1)|ψ>L」となる。図12の例では、データ量子ビット40dにエラーが発生しているものとする。
【0090】
このときエラーが発生したデータ量子ビット40dに、補助量子ビット41d周囲のZスタビライザ演算子を作用させると「Z(i1)(i2)(i3)(i4)|ψ’>L」と表される。この式は「|ψ’>L=X(i1)|ψ>L」の関係を用いて以下のように変形できる。
【0091】
(i1)(i2)(i3)(i4)|ψ’>L=Z(i1)(i2)(i3)(i4)(i1)|ψ>L=Z(i1)(i1)(i2)(i3)(i4)|ψ>L
Z演算子とZ演算子は反交換関係を満たすので、さらに以下の様に変形できる。
【0092】
(i1)(i1)(i2)(i3)(i4)|ψ>L=-X(i1)(i1)(i2)(i3)(i4)|ψ>L=-X(i1)|ψ>L=-|ψ’>L
「-|ψ’>L」は、固有値が「-1」に変化していることを示している。この固有値の変化は、量子回路43を用いることで、補助量子ビット41dのビット反転として検知できる(|ψ>L=|0000>+|1111>で初期化)。
【0093】
このようにして、補助量子ビットを測定することで、その周囲のデータ量子ビットの1つにおけるエラーの発生が検知できることが説明できる。ただし、1つの補助量子ビットだけでは、その周囲のデータ量子ビットのどれでエラーが発生したのかが分からない。そこで複数の補助量子ビットのうちエラーを検出した2以上の補助量子ビットの位置関係に基づいて、エラーが発生したデータ量子ビットが特定される。
【0094】
図13は、エラー箇所特定の一例を示す図である。図13ではZエラーのエラー箇所の特定例を示しているがXエラーに関しても同様のエラー箇所を特定可能である。図13では、補助量子ビットのうち、Xエラー検知用の補助量子ビットが省略されている(図14図20においても同様)。
【0095】
ここで、データ量子ビット51においてZエラーが発生したものとする。エラー検知処理では、すべての補助量子ビットについて、図10に示した量子回路44と同様のゲート操作によりエラー検知が行われ、状態が測定される。図13では、測定対象の補助量子ビットと、その補助量子ビットによるエラー検知対象のデータ量子ビットとを円で囲んでいる。
【0096】
エラーが発生したデータ量子ビット51は、2つの補助量子ビット52,53それぞれと同じ円内にある。この場合、補助量子ビット52,53は、測定によって状態が反転したことが検知される。補助量子ビット52,53の状態が反転したことで、それらに挟まれた位置にあるデータ量子ビット51が、エラー発生箇所として特定される。そこでデータ量子ビット51に対してエラー訂正の操作(Zゲート操作)が行われる。
【0097】
このように、エラー箇所が1箇所だけであれば、エラー箇所を一意に特定可能である。しかし、2つ以上のエラーが発生し、エラー発生箇所が接近している場合、エラー発生箇所を一意に特定できない可能性がある。
【0098】
なお接近した2箇所で発生したエラー訂正に成功する場合もある。格子状に並べた量子ビットのうち、格子のある一辺のデータ量子ビットにエラーが複数個起こった場合、そのエラーの数が格子一辺分のデータ量子ビット数の半分よりも少なければ、エラー訂正に成功できることが知られている。例えば一辺のデータ量子ビット数が9の格子であれば、偶然ある一辺にエラーが集中して発生したとしても、4個までであれば原理的にはエラー訂正が可能である。逆に、5個以上のエラーが起こった場合は、表面符号の理論に従い、残りの4個が間違って訂正される。その結果、その一辺のデータ量子ビットがすべて反転した形になる。この状態は論理エラーが発生した状態である。このように、十分多数のデータ量子ビットにエラーが発生した場合には、論理エラーとなる可能性が高い。
【0099】
図14は、エラー発生箇所を一意に特定できない場合の一例を示す図である。図14の例では、2箇所のデータ量子ビットでエラーが発生している。エラーが発生したデータ量子ビット間の位置は1行3列の差がある。この場合、エラーが発生したデータ量子ビットのいずれかに隣接する4つの補助量子ビットの状態が反転する(測定情報が「-1」となる)。反転した4つの補助量子ビットに基づいて、エラー量子ビットの位置の特定を試みることとなる。
【0100】
反転した4つの補助量子ビットを反転させ、それ以外の補助量子ビットを反転させないエラーの発生パターンは3通りある。第1のエラー発生パターン61は、エラーが発生データ量子ビットを正しく特定した場合の例である。第2のエラー発生パターン62と第3のエラー発生パターン63は、エラーが発生データ量子ビットを正しく特定できていない場合の例である。
【0101】
このように、反転した4つの補助量子ビットを反転させ、それ以外の補助量子ビットを反転させないエラーの発生パターンが複数存在する場合、エラー箇所を一意に決められない。ただし、量子エラー訂正においては、エラーが発生したデータ量子ビットを正しく特定できなくても、エラー訂正により論理量子状態を正しい状態に維持できればよい。そして、所定の条件を満たせば、エラーが発生したデータ量子ビットと異なるデータ量子ビットを訂正することによって、論理量子状態を正しい状態にすることができる。
【0102】
図15は、エラーが発生した箇所とは別のデータ量子ビットを訂正することによるエラー訂正の一例を示す図である。図15では、2箇所のデータ量子ビット64,65でエラーが発生している。これらのデータ量子ビット64,65の行方向に1行ずれており、列方向にも1行ずれている。この場合、エラー検知により、データ量子ビット64の上に隣接する補助量子ビット66の状態が反転するとともに、データ量子ビット65の右に隣接する補助量子ビット67の状態が反転する。なおデータ量子ビット64の下に隣接する補助量子ビット70はデータ量子ビット65の左に隣接しているため、状態は反転しない。
【0103】
このとき、補助量子ビット66,67が反転し、その他の補助量子ビットが反転しないようなエラーの発生パターンとして、データ量子ビット64,65でエラーが発生した場合以外に、データ量子ビット68,69でエラーが発生した場合がある。ここでエラーが発生したデータ量子ビット64,65ではなく、データ量子ビット68,69に対してエラー訂正操作を行ったものとする。
【0104】
すると、エラー訂正を行ったデータ量子ビット68,69とエラー未訂正のデータ量子ビット64,65とでループ72が形成される。ここでループ72が形成されるとは、誤って訂正したデータ量子ビットおよびエラー未訂正のデータ量子ビットのうち、共通のZエラー検知用の補助量子ビットに隣接するデータ量子ビット同士を線で結んだとき、閉曲線が形成されることである。なおXエラーを修正する場合には、誤って訂正したデータ量子ビットおよびエラー未訂正のデータ量子ビットのうち、共通のZエラー検知用の補助量子ビットに隣接するデータ量子ビット同士を線で結ぶことでループ72が形成される。
【0105】
図15の例では、エラー未訂正の2つのデータ量子ビット64,65は共に補助量子ビット70に隣接しているため、線で結ぶことができる。エラー未訂正のデータ量子ビット65と誤って訂正したデータ量子ビット69とは共に補助量子ビット67に隣接しているため、線で結ぶことができる。誤って訂正した2つのデータ量子ビット68,69は共に補助量子ビット71に隣接しているため、線で結ぶことができる。誤って訂正したデータ量子ビット68とエラー未訂正のデータ量子ビット64とは共に補助量子ビット66に隣接しているため、線で結ぶことができる。その結果、エラー未訂正のデータ量子ビット64,65と誤って訂正したデータ量子ビット68,69とを接続する線が閉曲線を形成する。すなわち、ループ72が形成される。
【0106】
ループは複数形成されていてもよい。誤って訂正したデータ量子ビットおよびエラー未訂正のデータ量子ビットのすべてがいずれかのループに属している場合、論理量子状態は元の状態(エラーが発生したデータ量子ビットを正しく訂正した状態)に保たれる。すなわち、ループが形成された場合、エラー未訂正のデータ量子ビット64,65とエラー訂正を行ったデータ量子ビット68,69は、数学的にはどちらもZ演算子が作用した状態であり、それらは1つのスタビライザ演算子S=ZZZZを形成する。論理量子状態|ψ>Lはスタビライザ演算子Sの固有状態(S|ψ>L=|ψ>L)なので、論理量子状態|ψ>Lは元の固有値の固有状態に保たれる。
【0107】
このように量子エラー訂正においては、訂正した箇所と実際のエラー箇所が一致していなくても、ループが形成されていればよい。
図16は、エラー訂正成功パターンの例を示す図である。エラー訂正成功パターン75は、エラーが発生したデータ量子ビットと訂正したデータ量子ビットとが完全に一致した場合である。またエラー訂正成功パターン76,77は、エラー未訂正のデータ量子ビットと誤って訂正したデータ量子ビットとでループが形成されていることでエラー訂正に成功した場合である。このように、表面符号でエラー訂正を成功させるには、訂正箇所と実際のエラー箇所が完全一致するか、ループが形成されていることが要件となる。
【0108】
ここで、補助量子ビットの周囲における訂正されたデータ量子ビットの数に着目する。すると、エラー訂正が成功した状態では、反転した補助量子ビットの周囲では奇数個のデータ量子ビットが訂正されている。また反転していない補助量子ビットの周囲では偶数個のデータ量子ビットが訂正されている。このような性質は偶奇の制約と呼ばれる。
【0109】
例えばエラー訂正成功パターン75における反転した補助量子ビット75a,75bそれぞれの周囲で訂正されたデータ量子ビットの数は、いずれも「1」(奇数)である。また反転していない補助量子ビット75cの周囲で訂正されたデータ量子ビットの数は「0」(偶数)である。エラー訂正成功パターン76における反転した補助量子ビット76a,76bそれぞれの周囲で訂正されたデータ量子ビットの数は、いずれも「1」(奇数)である。また反転していない補助量子ビット76cの周囲で訂正されたデータ量子ビットの数は「0」(偶数)である。エラー訂正成功パターン77における反転した補助量子ビット77f,77gそれぞれの周囲で訂正されたデータ量子ビットの数は、いずれも「1」(奇数)である。また反転していない補助量子ビット77a~77eそれぞれの周囲で訂正されたデータ量子ビットの数は、いずれも「2」(偶数)である。
【0110】
ただし、このような偶奇の制約はエラー訂正成功の必要条件であり、十分条件ではない。すなわち、エラー訂正後、たとえ偶奇の制約が守られていても、エラー訂正に失敗している場合がある。その場合、エラーもしくは誤訂正によって反転したデータ量子ビットの並びがループにならず、一方の境界から反対側の境界までつながった状態になる。数学的には、これは論理量子状態|ψ>Lに論理Z演算子Lzもしくは論理X演算子Lxが作用した状態であり、論理エラーと呼ばれる。
【0111】
図17は、誤訂正による論理エラーの一例を示す図である。図17に示すエラー発生パターン78では、同じ列上の1つのデータ量子ビット78a~78cでZエラーが発生している。この場合、同じ列上でデータ量子ビット78a~78cいずれかに隣接する補助量子ビット78d~78hの状態が反転する。このとき、エラー訂正により、エラーが発生したデータ量子ビット78a~78cとは別のデータ量子ビット78i~78kに対してエラー訂正操作を行ったものとする。このようなエラー訂正であっても偶奇の制約は守られている。しかし、エラーが発生したデータ量子ビット78a~78cと訂正したデータ量子ビット78i~78kとは一致しておらず、ループも形成されていない。すなわち誤訂正による論理エラーとなっている。
【0112】
論理エラーが発生してしまうと、正しい計算を行うことができない。表面符号においてどの程度の頻度で論理エラーが発生するのかは、論理量子ビットを構成する量子ビット数、各量子ビットのエラー発生頻度などに依存する。量子コンピュータ実機ではデータ量子ビットそのものを測定しないと論理エラーかどうか判定できず、その発生頻度も把握することができない。しかし、古典コンピュータを用いた表面符号によるエラー訂正のシミュレーションであれば、エラーの発生箇所があらかじめ分かるので、論理エラーの発生の有無を判別することが可能である。論理エラーの発生の有無は、エラーが発生したデータ量子ビットのつながり(エラーチェイン)を探索することで判別可能である。
【0113】
以下、表面符号のシミュレーションの有用性について説明する。
現時点では100量子ビット以上の量子コンピュータは存在しない。そのため現状では、表面符号を用いた大規模な量子エラー訂正を実機により検証することはできない。ただし、将来的な大規模量子ビットを備えた量子コンピュータの実現に向けて、量子エラー訂正の検討は現時点から進めておくことが重要である。そのため、現状では表面符号を用いた大規模な量子エラー訂正を古典コンピュータによるシミュレーションで再現し、エラー訂正の適切さを検証することが有効となる。
【0114】
大規模な量子コンピュータを想定して表面符号による量子エラー訂正のシミュレーション(以下、表面符号シミュレーションと呼ぶ)を行う場合、論理エラー発生の有無の判定を効率的に実行できることが望まれる。
【0115】
図18は、エラーチェインの探索による論理エラー判定の一例を示す図である。表面符号を古典コンピュータでシミュレーションし、論理エラーを判定する際、コンピュータは、2次元格子上でエラーチェインが一方の境界からもう一方の境界までつながっているかどうかを探索する。具体的には、コンピュータは、まず境界のデータ量子ビットのうち反転しているものがあれば、そのデータ量子ビットを探索の起点とする。図18の例では、データ量子ビット78aが探索の起点である。
【0116】
次にコンピュータは、起点のデータ量子ビット78aから順に、同じ補助量子ビットに隣接するデータ量子ビットが反転しているか否かを判定していく。コンピュータは、状態が反転しているデータ量子ビットと同じ補助量子ビットに隣接するデータ量子ビットの状態が反転していれば、そのデータ量子ビットをエラーチェインに繋げる。そしてコンピュータは、最終的にエラーチェインが反対側の境界にあるデータ量子ビット78iとつながっていれば論理エラーであると判定する。
【0117】
図18に示したような論理エラーの判定の場合、エラーの数が多くなるほど探索の回数が増えてしまう。また2次元格子の1辺のデータ量子ビット数をN(Nは自然数)とすると、Nが十分大きいとき探索回数はNの指数関数的に増加する。すると、大規模な表面符号シミュレーションを行う際に、論理エラー判定の時間が長くなり、実行効率が悪化する。
【0118】
そこで第2の実施の形態に係るコンピュータ100は、2次元格子1列分のデータ量子ビットの状態データのみで論理エラーの有無を判定する。
図19は、2次元格子1列分のデータ量子ビットの状態データに基づく論理エラー判定の一例を示す図である。図17に示したエラー発生パターン78と同様のエラーが発生した場合における3通りのエラー訂正パターンを示している。エラー訂正成功パターン81-1は、エラーが発生したデータ量子ビット81a~81cについて、完全一致でデータ訂正を行った場合の例である。エラー訂正成功パターン81-2は、エラーが発生したデータ量子ビット81a,81cとエラーが発生していないデータ量子ビット81d~81fのデータ訂正を行っているが、ループが形成されることでエラー訂正に成功した例である。エラー訂正失敗パターン81-3は、エラーが発生していないデータ量子ビット81g~81iのデータ訂正を行ったことによる論理エラーの発生例である。
【0119】
図19に示すように、エラー訂正の結果、偶奇の制約が守られていればデータ量子ビットの状態は以下のどれかになる。
1.エラー量子ビットが完全に訂正されている。
2.反転量子ビット(エラー未訂正のデータ量子ビットと誤訂正のデータ量子ビット)がループを形成している。
3.論理エラーが起きている。
【0120】
コンピュータは、図19における2次元格子の一列(調査対象列82a~82c)のデータ量子ビットのうちの反転量子ビットの数が偶数もしくは奇数のどちらかになるかを調査する。なお調査対象列82a~82cは、例えばスムーズ境界にデータ量子ビットが存在する列の中から任意の列が選択される。
【0121】
エラー訂正成功パターン81-1では、調査対象列82aの反転量子ビットの数は「0」(偶数)である。エラー訂正成功パターン81-2では、調査対象列82bの反転量子ビットの数は「2」(偶数)である。エラー訂正失敗パターン81-3では、調査対象列82cの反転量子ビットの数は「1」(奇数)である。
【0122】
このように、エラー訂正に成功している場合には、調査対象列内の反転量子ビットの数が偶数となり、論理エラーが発生する場合には、調査対象列内の反転量子ビットの数が奇数となる。そこでコンピュータ100は、縦一列の反転量子ビット数が奇数の場合に論理エラーと判定する。
【0123】
縦一列の反転量子ビット数が奇数の場合に論理エラーと判定することが正しい理由は以下の通りである。
図20は、縦一列の反転量子ビット数が奇数の場合に論理エラーとなることを説明する図である。図20には、2次元格子配列に論理Z演算子Lzが作用した状態83と、2次元格子配列に論理X演算子Lxが作用した状態84とが示されている。
【0124】
ここで、論理量子状態を|ψ>Lとし、Zエラーの発生と訂正を通じて|ψ>Lに作用する演算子をまとめてAzとする。この場合、論理エラーが発生したかどうかは、Azが論理Z演算子Lzに等しいかどうかで判定できる。
【0125】
前述したように、論理Z演算子Lzは以下の性質を有する。
・Lzはすべてのスタビライザ演算子と交換関係を満たす。
・LzとLxは反交換関係(LzLx=-LxLz)を満たす。
【0126】
偶奇の制約が満たされていれば、Azは常にすべてのスタビライザ演算子との交換関係を満たす。もしAzが論理X演算子Lxと反交換関係を満たせば、AzはLzに等しいといえる。例えばスムーズ境界間のデータ量子ビット数が3の場合、Lx=X123である。AzがLxと反交換関係を満たすためには、Az=Z1、Az=Z2、Az=Z3、もしくはAz=Z123であることが要求される。これは、Zの数(=反転量子ビット数)が奇数であることを示す。
【0127】
以上の説明はZエラーにおける論理エラー判定方法であるが、Xエラーにおける論理エラー判定も同様の方法で行うことができる。Xエラーにおける論理エラー判定では、格子1行(調査対象行)のデータ量子ビットに基づいて論理エラーを判定することとなる。
【0128】
図21は、論理エラー判定に用いられるデータ量子ビットの一例を示す図である。図21の例では、ラフ境界が列方向の辺である、スムーズ境界が行方向の辺である。この場合、スムーズ境界にデータ量子ビットが存在する列のうちの任意の1列が、Zエラーの論理エラー判定に使用する調査対象列85となる。またラフ境界にデータ量子ビットが存在する行のうちの任意の1行が、Xエラーの論理エラー判定に使用する調査対象行86となる。
【0129】
以下、反転量子ビット数に基づく論理エラー判定を伴う表面符号シミュレーションについて具体的に説明する。
図22は、表面符号シミュレーションを実施するためのコンピュータの機能を示すブロック図である。コンピュータ100は、記憶部110、表面符号シミュレーション管理部120、エラー発生状態生成部130、エラー訂正部140、および論理エラー判定部150を有する。
【0130】
記憶部110は、シミュレーション条件111およびシミュレーション結果112を記憶する。シミュレーション条件111には、例えば2次元格子のサイズ、量子ビットのエラー率などの情報が含まれる。シミュレーション結果112には、例えば論理エラー発生率などの情報が含まれる。
【0131】
表面符号シミュレーション管理部120は、表面符号シミュレーションの進行を管理する。例えば、シミュレーション条件111の入力を受け付け、入力されたシミュレーション条件111を記憶部110に格納する。また、表面符号シミュレーション管理部120は、エラー発生状態生成部130、エラー訂正部140、および論理エラー判定部150に、所定回数だけ表面符号シミュレーションを実行させる。さらに表面符号シミュレーション管理部120は、シミュレーション結果112を記憶部110に格納する。
【0132】
エラー発生状態生成部130は、シミュレーション条件111に従って2次元格子内のデータ量子ビットにXエラーまたはZエラーを発生させる。またエラー発生状態生成部130は、発生させたエラーに応じて、補助量子ビットの状態を反転させる。
【0133】
エラー訂正部140は、反転した補助量子ビットの状態に基づいてエラー訂正処理を行う。エラー訂正処理により、エラーが発生したものと推定されたデータ量子ビットの状態が反転する。
【0134】
論理エラー判定部150は、エラー訂正後の2次元格子に示される論理量子ビットの状態が論理エラーとなっているか否かを判定する。論理エラー判定部150は、判定結果を表面符号シミュレーション管理部120に通知する。
【0135】
なお、図22に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。また、図22に示した各要素の機能は、例えば、その要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
【0136】
次に、表面符号シミュレーションを利用した論理エラー判定処理の手順について詳細に説明する。
図23は、表面符号シミュレーションを利用した論理エラー判定処理の手順の一例を示すフローチャートである。以下、図23に示す処理をステップ番号に沿って説明する。
【0137】
[ステップS101]表面符号シミュレーション管理部120は、ユーザからのシミュレーション条件111の入力を受け付ける。表面符号シミュレーション管理部120は、シミュレーション条件111が入力されると、そのシミュレーション条件111を記憶部110に格納する。
【0138】
[ステップS102]表面符号シミュレーション管理部120は、エラー発生状態生成部130、エラー訂正部140、および論理エラー判定部150と連係して、表面符号シミュレーションを実行する。表面符号シミュレーションの処理の詳細は後述する(図24参照)。表面符号シミュレーションにより、シミュレーション条件111に示された表面符号によるエラー訂正を実施した場合における論理エラーの発生の有無を示す情報が得られる。
【0139】
[ステップS103]表面符号シミュレーション管理部120は、表面符号シミュレーションを所定回数(例えば1万回)だけ繰り返したか否かを判断する。表面符号シミュレーション管理部120は、繰返し回数が所定回数に達した場合、処理をステップS104に進める。また表面符号シミュレーション管理部120は、繰返し回数が所定回数に満たない場合、処理をステップS102に進める。
【0140】
[ステップS104]表面符号シミュレーション管理部120は、所定回数分の表面符号シミュレーションで得られた論理エラーの有無を示す情報に基づいて、論理エラーの発生率を計算する。論理エラーの発生率は、例えば表面符号シミュレーションにより論理エラーが発生したと判定した回数を、表面符号シミュレーションの繰返し回数で除算した値である。
【0141】
またエラー発生パターンに応じて複数のデータ訂正パターンが存在する場合、表面符号シミュレーションにおいて、1つのエラー発生パターンに応じた複数のデータ訂正パターンそれぞれでの論理エラーの発生の有無を判定することもできる。この場合、表面符号シミュレーション管理部120は、例えばエラー発生パターンごとに、論理エラーの発生率を計算する。この場合の論理エラー発生率は、1つのエラー発生パターンに応じた複数のデータ訂正パターンのうちの、論理エラーと判定されたデータ訂正パターンの割合である。表面符号シミュレーション管理部120は、例えば複数のエラー発生パターンそれぞれの論理エラー発生率の平均を、シミュレーション結果112として算出する。そして表面符号シミュレーション管理部120は、論理エラーの発生率を含むシミュレーション結果112を記憶部110に格納する。
【0142】
このようにしてシミュレーション条件111に応じた論理エラーの発生率が得られる。
図24は、シミュレーション条件の一例を示す図である。シミュレーション条件111には、例えば以下のデータが含まれる。
・データ量子ビットの状態データ:qi(i=1,・・・,Ndata
(Ndataは、データ量子ビットの数)
・補助量子ビットの状態データ:ai(i=1,・・・,Nsub
(Nsubは、データ量子ビットの数)
・Zエラー率データ:Rz
・Xエラー率データ:Rx
Zエラー率データは、データ量子ビットにおいてZエラーが発生する確率を示すデータである。Xエラー率データは、データ量子ビットにおいてXエラーが発生する確率を示すデータである。
【0143】
次に表面符号シミュレーションの処理の詳細について説明する。
図25は、表面符号シミュレーションの処理の手順の一例を示すフローチャートである。以下、図25に示す処理をステップ番号に沿って説明する。
【0144】
[ステップS111]表面符号シミュレーション管理部120は、記憶部110からシミュレーション条件111を取得する。表面符号シミュレーション管理部120は、取得したシミュレーション条件111に基づいて、矩形領域内に行方向と列方向とに等間隔に量子ビットを配置した2次元格子を示す量子ビット情報を生成する。量子ビット情報では、各量子ビットについての量子状態を示す状態データが含まれる。表面符号シミュレーション管理部120は、生成した量子ビット情報をエラー発生状態生成部130に送信し、2次元格子内のデータ量子ビットに対するエラー発生状態の生成を指示する。
【0145】
[ステップS112]エラー発生状態生成部130は、変数iを1から順に1ずつカウントアップしてNdataに達するまでのiの値ごとに、ステップS113~S115の処理を実行する。
【0146】
[ステップS113]エラー発生状態生成部130は、0より大きく1未満の乱数rを生成する。
[ステップS114]エラー発生状態生成部130は、乱数rの値が、Zエラー率を示すRzより小さいか否かを判断する。エラー発生状態生成部130は、乱数rの値がRzより小さければ処理をステップS115に進める。またエラー発生状態生成部130は、乱数rの値がRz以上であれば処理をステップS116に進める。
【0147】
[ステップS115]エラー発生状態生成部130は、i番目のデータ量子ビットの状態の位相を反転させる。またエラー発生状態生成部130は、位相を反転させたデータ量子ビットに隣接するZエラー検知用の補助量子ビットの状態データ(j番目の補助量子ビットであればaj)の値を更新する(aj=-aj)。
【0148】
[ステップS116]エラー発生状態生成部130は、変数iの値がNdataに達していれば処理をステップS117に進める。
[ステップS117]エラー発生状態生成部130は、変数iを1から順に1ずつカウントアップしてNdataに達するまでのiの値ごとに、ステップS118~S121の処理を実行する。
【0149】
[ステップS118]エラー発生状態生成部130は、0より大きく1未満の乱数rを生成する。
[ステップS119]エラー発生状態生成部130は、乱数rの値が、Xエラー率を示すRxより小さいか否かを判断する。エラー発生状態生成部130は、乱数rの値がRxより小さければ処理をステップS120に進める。またエラー発生状態生成部130は、乱数rの値がRx以上であれば処理をステップS121に進める。
【0150】
[ステップS120]エラー発生状態生成部130は、i番目のデータ量子ビットのビットを反転させる。またエラー発生状態生成部130は、ビットを反転させたデータ量子ビットに隣接するXエラー検知用の補助量子ビットの状態データ(j番目の補助量子ビットであればaj)の値を更新する(aj=-aj)。
【0151】
[ステップS121]エラー発生状態生成部130は、変数iの値がNdataに達していれば処理をステップS122に進める。
[ステップS122]エラー訂正部140は、補助量子ビットの状態データに基づいてデータ量子ビットのエラー訂正処理を行う。例えばエラー訂正部140は、値が反転したデータ量子ビットに基づいて、図14に示したようにZエラーまたはXエラーが発生したデータ量子ビットを特定する。そしてエラー訂正部140は、エラーが発生したと推定されたデータ量子ビットに対して、発生したエラーに応じたエラー訂正処理を行う。例えばエラー訂正部140は、Zエラーが発生したと推定したデータ量子ビットの位相を反転させ、Xエラーが発生したと推定したデータ量子ビットのビットを反転させる。
【0152】
[ステップS123]論理エラー判定部150は、1列の反転量子ビット数による論理エラー(Zエラー)判定処理を行う。この処理の詳細は後述する(図26参照)。
[ステップS124]論理エラー判定部150は、1行の反転量子ビット数による論理エラー(Xエラー)判定処理を行う。この処理の詳細は後述する(図27参照)。
【0153】
このようにして、ランダムにデータ量子ビットにエラーを発生させた場合における論理エラーの発生の有無が判定される。次に、図26図27とを参照し、反転量子ビット数による論理エラー判定処理を詳細に説明する。
【0154】
図26は、論理エラー(Zエラー)判定処理の手順の一例を示すフローチャートである。以下、図26に示す処理をステップ番号に沿って説明する。
[ステップS131]論理エラー判定部150は、2次元格子1列(調査対象列)分のデータ量子ビットの状態データqi(i=1,・・・,Ncc)を用意する。Nccは、2次元格子1列分のデータ量子ビットの数である。
【0155】
[ステップS132]論理エラー判定部150は、反転量子ビット数Nrを初期値「0」にセットする。
[ステップS133]論理エラー判定部150は、変数iを1から順に1ずつカウントアップしてNccに達するまでのiの値ごとに、ステップS134~S135の処理を実行する。
【0156】
[ステップS134]論理エラー判定部150は、i番目のデータ量子ビットの位相反転の有無を示す状態データqiの値が「1」か否かを判断する。論理エラー判定部150は、値が「1」であれば処理をステップS135に進める。また論理エラー判定部150は、値が「0」であれば処理をステップS136に進める。
【0157】
[ステップS135]論理エラー判定部150は、反転量子ビット数Nrに「1」を加算する。
[ステップS136]論理エラー判定部150は、変数iの値がNccに達していれば処理をステップS137に進める。
【0158】
[ステップS137]論理エラー判定部150は、反転量子ビット数Nrが奇数か否かを判断する。論理エラー判定部150は、奇数であれば処理をステップS138に進める。また論理エラー判定部150は、偶数であれば処理をステップS139に進める。
【0159】
[ステップS138]論理エラー判定部150は、論理エラーが発生していると判定し、論理エラー判定処理を終了する。
[ステップS139]論理エラー判定部150は、論理エラーが発生していないと判定する。
【0160】
以上の処理がZエラーについての論理エラー判定処理である。次にXエラーについての論理エラー判定処理について詳細に説明する。
図27は、論理エラー(Xエラー)判定処理の手順の一例を示すフローチャートである。以下、図27に示す処理をステップ番号に沿って説明する。
【0161】
[ステップS141]論理エラー判定部150は、2次元格子1行(調査対象行)分のデータ量子ビットの状態データqi(i=1,・・・,Ncr)を用意する。Ncrは、2次元格子1行分のデータ量子ビットの数である。
【0162】
[ステップS142]論理エラー判定部150は、反転量子ビット数Nrを初期値「0」にセットする。
[ステップS143]論理エラー判定部150は、変数iを1から順に1ずつカウントアップしてNcrに達するまでのiの値ごとに、ステップS144~S145の処理を実行する。
【0163】
[ステップS144]論理エラー判定部150は、i番目のデータ量子ビットのビット反転の有無を示す状態データqiの値が「1」か否かを判断する。論理エラー判定部150は、値が「1」であれば処理をステップS145に進める。また論理エラー判定部150は、値が「0」であれば処理をステップS146に進める。
【0164】
[ステップS145]論理エラー判定部150は、反転量子ビット数Nrに「1」を加算する。
[ステップS146]論理エラー判定部150は、変数iの値がNcrに達していれば処理をステップS147に進める。
【0165】
[ステップS147]論理エラー判定部150は、反転量子ビット数Nrが奇数か否かを判断する。論理エラー判定部150は、奇数であれば処理をステップS148に進める。また論理エラー判定部150は、偶数であれば処理をステップS149に進める。
【0166】
[ステップS148]論理エラー判定部150は、論理エラーが発生していると判定し、論理エラー判定処理を終了する。
[ステップS149]論理エラー判定部150は、論理エラーが発生していないと判定する。
【0167】
以上の処理がXエラーについての論理エラー判定処理である。
このように論理エラー判定部150は、2次元格子の1列または1行分のデータ量子ビットの値を調査するだけで論理エラーの有無を判定することができる。その結果、効率的な論理エラー判定が可能となる。
【0168】
図28は、2次元格子の1辺のデータ量子ビット数と探索回数との関係を示すグラフである。グラフ90は、横軸が2次元格子の1辺のデータ量子ビット数Nであり、縦軸が探索回数である。探索回数は、1つのデータ量子ビットの状態を確認するごとに1回とカウントしている。グラフ90内の折れ線91は、図18に示すようなエラーチェインの探索による論理エラー判定を行った場合の探索回数を示す折れ線である。近似曲線92は、エラーチェインの探索による論理エラー判定を行った場合の折れ線91に対する近似曲線である。近似曲線92は、横軸をx、縦軸をyとした場合にはy=21.13xの指数関数となっている。折れ線は、2次元格子1列(または1行)の反転量子ビット数による論理エラー判定を行った場合の探索回数を示す折れ線である。折れ線93は、横軸をx、縦軸をyとした場合には、y=x+1の直線で表すことができる。
【0169】
図28の例では、1辺のデータ量子ビット数N=2~10における各論理エラー判定における探索回数を示している。シミュレーション条件におけるエラー確率は20%である。図28に示すように、エラーチェインの探索では探索回数がNに対して指数関数的に探索回数が増えているのに対し、反転量子ビット数による論理エラー判定ではNの1次関数で探索回数が増えている。
【0170】
以上のように、反転量子ビット数による論理エラー判定により、論理エラーが発生しているかどうかの判定を短時間で行うことができる。すなわち、2次元格子の1辺のデータ量子ビット数をNとすると、探索回数をNの指数関数から1次関数にまで落とすことが可能である。例えば40量子ビットの場合、エラーチェインではクロック数1GHzのプロセッサで処理した場合、処理時間は21.13×40×10-9/3600=11.26(h)となり約半日かかる。それに対して反転量子ビット数による論理エラー判定では、処理時間が40+1=41(nsec)に短縮される。
【0171】
〔その他の実施の形態〕
第2の実施の形態では、5行11列の2次元格子状に配置された量子ビットにより論理量子ビットが構成されているが、行数または列数が変わっても、同様の処理で論理エラーを判定可能である。
【0172】
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【符号の説明】
【0173】
1 量子ビット情報
10 情報処理装置
11 記憶部
12 処理部

図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28