ショアのアルゴリズム
次に、整数因数分解問題に注目し、位相推定を用いて量子コンピューター上でどのように効率的に解くことができるかを見てみよう。 私たちが手に入れるアルゴリズムは、 整数因数分解のためのショールのアルゴリズムである。 ショールは彼のアルゴリズムを位相推定という観点から具体的に説明しなかったが、それがどのように機能するかを説明するには自然で直感的な方法だ。
まず、 次数探索問題として知られる中間問題について説明し、位相推定がこの問題の解決策となることを見ていく。 次に、順序探索問題の効率的な解法が、整数因数分解問題の効率的な解法にどのようにつながるかを見ていく。 (ある問題の解が、このように別の問題の解を提供するとき、2番目の問題は最初の問題に還元されると言う。つまり、この場合は整数因数分解を順序探索に還元しているのだ) このショーのアルゴリズムの2番目の部分は、量子計算をまったく利用していない。 量子コンピューターが必要なのは、秩序発見を解くことだけだ。
順序探索問題
いくつかの基本的な数論
次数探索問題と、それが位相推定を使ってどのように解けるかを説明するには、まず基本的な数論の概念から始め、その過程で便利な記法をいくつか紹介するのが役に立つだろう。
まず、任意の正の整数 に対し、集合 を次のように定義する。
例えば、こうだ、 などなど。
これらは数の集合ですが、単なる集合以上のものとして捉えることもできます。 特に、 における加算や乗算といった算術演算について考えてみましょう。ここで、答えを常に による剰余として扱う( つまり、 で割り、その余りを結果とする)ことにすれば、これらの演算を行う際、常にこの集合の範囲内に収まることになります。 加法と乗法という2つの具体的な演算(いずれも を法とする)により、 は環となり、これは代数において極めて重要な対象の一種である。
例えば、 と は の要素であり、これらを掛け合わせると となり、これを で割ると余りが となります。 これを次のように表すこともあります。
ただし、表記をできるだけ簡潔にするために、 を使用していることが明確になっていれば、単に と書くこともできます。
例として、 の足し算と掛け算の九九を以下に示します。
の の要素のうち、 を満たす の要素は特別である。 多くの場合、これらの要素を含む集合は、このようにアスタリスクで表されます。
乗算の演算に注目すると、集合 は群 ――具体的にはアーベル群 ――をなしており、これは代数におけるもう一つの重要な対象である。 これらの集合(および一般の有限群)に関する基本的な事実として、任意の要素 を選び、 を繰り返し自身と掛け合わせると、最終的には常に という数になることが挙げられます。
最初の例として、 を取り上げましょう。 であるため、 が成り立ちます。また、 を自身と掛け合わせると、 となります。 これは、上の表が示す通りです。
2つ目の例として、 を取り上げましょう。 から までの数を調べていくと、 との最大公約数(GCD)が となるものは以下の通りです。
これらの各要素について、その数を正の整数の累乗にすることで、 を得ることができます。 これが成り立つ最小の累乗は以下の通りです:
当然のことながら、これらの方程式はすべて 、わざわざ書くまでもなく、物事の混乱を避けるために暗黙の了解としている。 このレッスンの残りの部分を通して、それを続けていく。
問題の定義と位相推定との関連性
これで、順序探索の問題を述べることができる。
入力:以下を満たす正の整数 と \ 出力: を満たす最小の正の整数
あるいは、上で紹介した表記法で言えば、 が与えられ、 となる最小の正の整数を探しています。この数は、 のを法とする位数と呼ばれます。
順序決定問題と位相推定を結びつけるために、古典状態が に対応する系上で定義される演算について考えてみましょう。ここで、固定された要素 を乗算します。
明確にしておくと、乗算は で行っているため、式右辺のket内部では、 をモジュロとして積を計算していることが暗黙的に示されています。
例えば、 および を考えるとき、 の標準基底 に対する作用は次のようになる。
を満たす場合、これは単一演算である。これは、標準基底 の要素を並べ替えるものであり、行列として見れば置換行列となる。 その定義から、この演算が決定論的であることは明らかであり、それが可逆であることを確認する簡単な方法は、 を で割った商の順序 を考え、 の逆元が であることを認識することである。
逆関数について考える別の方法があります。この方法では、 に関する知識は一切必要ありません(結局のところ、私たちが計算しようとしているのはそれなのですから)。 任意の要素 に対して、常に を満たす一意な要素 が存在する。 この要素 を と表し、これは効率的に計算することができる。 ユークリッドの最大公約数アルゴリズムの拡張版を用いれば、 の二乗に比例する計算量でこれを計算できる。 したがって、
つまり、演算 は決定論的であり、かつ反転可能である。 これは順列行列で記述されることを意味し、したがってユニタリーである。
それでは、 と仮定して、演算 の固有ベクトルと固有値について考えてみましょう。 先ほど論じたように、この仮定から、 がユニタリであることがわかります。
には 個の固有値があり、同じ固有値が複数回繰り返される可能性もあります。また、一般に、対応する固有ベクトルを選ぶ際にはある程度の自由度がありますが、ここではすべての可能性について心配する必要はありません。 まずは簡単なところから始め、 の固有ベクトルを1つだけ求めてみましょう。
は、 の による剰余の位数であり、ここおよびこのレッスンの残りの部分においても同様である。 この固有ベクトルに対応する固有値は、 を乗じても変化しないため、 となります。
これは、 であるためであり、したがって、各標準基底状態 は、 において へとシフトし、 は へと元に戻る。 平たく言えば、 をゆっくりと撹拌しているようなものだが、すでに完全に撹拌されているため、何も変化しない。
の固有ベクトルのもう1つの例を以下に示します。 この例は、位相の決定や位相推定という観点から見ると、特に興味深いものです。
あるいは、このベクトルを次のように和を使って書くこともできる。
ここでは、 による乗算が を法としてどのように作用するかによって、複素数 が自然に現れているのがわかります。 この場合、対応する固有値は となります。 これを確認するために、まず次のように計算してみましょう。
ここで、 かつ であることから、次のことがわかる
つまり、 。
同様の考え方を用いて、 について、さらに固有ベクトル・固有値の組を特定することができる。 を任意に選んだ場合、次のことが成り立つ。
は、 の固有ベクトルであり、これに対応する固有値は である。
には他にも固有ベクトルが存在しますが、それらについては特に気にする必要はありません。ここでは、先ほど特定した固有ベクトル のみに焦点を当てます。
位相推定によるオーダー検出
が与えられた場合の軌道決定問題を解くには、 という演算に対して位相推定手順を適用することができる。
これを行うには、量子回路を用いて を効率的に実装するだけでなく、 、 、 なども実装し、位相推定手順から十分に正確な推定値が得られるよう、必要に応じてさらに踏み込んだ実装を行う必要があります。 ここでは、その方法について説明し、必要な精度は後ほど具体的に検討していきます。
まずは、 という演算自体について見ていきましょう。 当然のことながら、量子回路モデルを扱っているため、 から までの数値を符号化するには、2進法を用います。 符号化する必要のある最大の数は であるため、必要なビット数は
たとえば、 の場合、 となります。 の各要素を、長さ のバイナリ文字列としてエンコードすると、次のようになります。
そして今、 がどのように -qubit操作として定義されるのか、ここに正確な定義がある。
重要なのは、 が に対してどのように作用するかにのみ関心があるとはいえ、残りの の標準基底状態に対してどのように作用するかを指定しなければならないという点です。そして、その指定は、依然としてユニタリ演算が得られるような方法で行わなければなりません。 残りの標準基底状態に対して何もしないように を定義することで、これが実現されます。
前回のレッスンで解説した整数の乗算および除算のアルゴリズムと、それらを可逆かつガベージフリーに実装するための手法を用いることで、任意の に対して、 を実行する量子回路を、コスト で構築することができます。 以下に、その実現方法の一例を示します。
- 動作を実行する回路を作る
ここで
前回のレッスンで説明した方法を使って。 これにより、 の大きさの回路が得られます。
-
2つの -qubitシステムを、 スワップゲートを使って個別にスワップする。
-
最初のステップと同じように、操作のための回路を作る
ここで、 は、 における の逆行列である。
一番下の の量子ビットを初期化し、3つのステップを合成することで、この変換が得られる:
この手法ではワークスペース量子ビットが必要ですが、処理終了時にそれらは初期化された状態に戻されるため、これらの回路を位相推定に利用することができます。 この回路の総コストは、 となります。
、 、 などを実行するには、まったく同じ手法を用いることができます。ただし、 の要素として、 を 、 、 などに置き換える点が異なります。 つまり、任意の累乗 を選んだ場合、 用の回路を作成するには、 用の回路を 回繰り返すのではなく、 を計算し、 用の回路を使用すればよいのです。
の累乗の計算は、前回のレッスンで触れたモジュラーべき乗問題です。 この計算は、前回のレッスンで触れたモジュラーべき乗のアルゴリズム(計算数論ではしばしば「 べき乗アルゴリズム 」と呼ばれる)を用いて、 従来の方法で行うことができます。 実際、必要なのは power-of-2 の 乗、具体的には のみであり、これらは を繰り返し 2 乗することで得ることができます。 各二乗演算は、サイズ のブール回路によって実行できる。
要するに、ここで実質的に行っているのは、 を 回も反復処理するという問題を、効率的な古典計算に委ねているということです。 そして、それが可能だというのは本当に幸運なことだ! 位相推定問題において、量子回路を任意に選択した場合、これは実現不可能である可能性が高い。その場合、位相推定にかかるコストは制御量子ビットの数に比例して指数関数的に増加する。 。
便利な固有ベクトルが与えられた場合の解
位相推定を用いて順序決定問題をどのように解決できるかを理解するために、まずは、 固有ベクトル を用いて、演算 に対して位相推定手順を実行すると仮定してみましょう。 実は、この固有ベクトルを入手するのは容易ではないため、話はこれで終わりではありませんが、ここから始めることは有益です。
固有ベクトル に対応する の固有値は以下の通りである
つまり、 に対して、 となる。 したがって、固有ベクトル を用いて に対して位相推定手順を実行すると、 の近似値が得られる。 逆数を計算することで、 を導き出すことができる――ただし、その近似が十分に正確である場合に限る。
より詳しく説明すると、 個の制御量子ビットを用いて位相推定手順を実行すると、得られる値は となります。 次に、 を の推定値として用います。今回のケースでは、これは となります。 この近似値から が何であるかを求めるには、当然のことながら、この近似値の逆数を計算し、最も近い整数に丸めるのが自然です。
例えば、 とし、固有ベクトル を用いて、 個の制御ビットで に対する位相推定を行うと仮定する。 に対する最良の ビット近似は であり、位相推定から という結果が得られる確率はかなり高い(この場合は約 )。 弊社では
また、最も近い整数に丸めると となり、これが正解です。
一方で、十分な精度を用いないと、正しい答えが得られない可能性があります。 例えば、位相推定において 個の制御量子ビットを用いると、 に対する最良の ビット近似が得られる可能性があり、これは となる。 逆数を求めると、次のようになる。
また、最も近い整数に丸めると、 という誤った答えが出てしまいます。
では、正しい答えを導き出すには、どれほどの精度が必要なのでしょうか? の次数は整数であることがわかっています。直感的に言えば、 と、 や といった近傍の候補を区別するのに十分な精度が必要となります。 に最も近い、考慮すべき数は であり、これら2つの数の間の距離は
したがって、 を と間違えないようにしたいのであれば、 に対する最良の近似値 が、 よりも に近いことを保証できるだけの十分な精度を用いればよい。 もし、次のような条件を満たすだけの十分な精度を用いるならば、
つまり、誤差が と の間の距離の半分未満となるようにすれば、 は、 や を含む他のどの可能性よりも、 に近いことになる。
これをダブルチェックすると、次のようになる。 仮に
を満たす
逆数を取ると次のようになる
分子を最大化し、分母を最小化することで、 。
「 」と「 」の差は未満なので、予想通り、四捨五入すると になります。
残念なことに、 が何なのかまだわかっていないため、それを使ってどれくらいの精度が必要なのかを知ることはできない。 その代わりにできることは、 が より小さくなければならないという事実を利用して、十分な精度を確保することである。 特に、 に対する最良の近似 が以下を満たすことを保証するのに十分な精度を用いるとする
そうすれば、逆数を取るときに を正しく決定するのに十分な精度が得られる。 を取ることで、前述した方法でこの精度の推定値が得られる可能性が高くなる。 (成功確率の下限が40%でよければ、 。)
一般解
先ほど見たように、 の固有ベクトル があれば、十分な精度でこれを行うのに必要な数の制御量子ビットを使用する限り、位相推定を通じて を学習することができます。 残念ながら、固有ベクトル を入手するのは容易ではないため、どう進めるべきかを考えなければなりません。
ひとまず、上記と同じように進めるが、 の代わりに固有ベクトル を用いると仮定しよう。ここで、 は任意に選んでよいとする。 位相推定手順から得られる結果は、近似値となります
も もわからないという前提に立てば、これにより を特定できる場合とできない場合がある。 例えば、 であれば、 に対する近似値 が得られるが、残念ながらこれだけでは何もわからない。 しかし、これは特殊なケースです。 の他の値については、少なくとも について何かしらの知見を得ることができるでしょう。
もし近似が十分であれば、 を近傍の分数( を含む)に変換するために、 継続分数アルゴリズムとして知られるアルゴリズムを使うことができる。 ここでは継続分数のアルゴリズムについては説明しない。 その代わりに、このアルゴリズムに関する既知の事実を説明しよう。
整数 と実数 が与えられたとき、 かつ を満たす整数 の組み合わせは、 を満たすものがせいぜい1つだけ存在する。 と が与えられたとき、 連分数アルゴリズムは と を見つけるか、それらが存在しないことを報告する。 このアルゴリズムは、サイズが のブール回路として実装することができる。
もし、 が に非常に近い近似値であり、 および について連分数のアルゴリズムを実行すると、事実で述べられているように、 および が得られる。 この事実を分析した結果、次のように結論づけることができる
特に、 や を必ずしも学ぶわけではないことに注意してください。学ぶのは、 という最も単純な形のものだけです。
例えば、すでに気づいた通り、 からは何も得られません。 しかし、そのようなことが起こる の値は、これだけです。 が0でない場合、 と共通因数を持つ可能性がありますが、連分数法から得られる数 は、少なくとも を割り切らなければなりません。
一見すると明らかではないが、 および を、 および に対して一様ランダムに選択した場合、それらを学習する能力があれば、わずか数回のサンプリングだけで を復元できる可能性が非常に高いというのは事実である。 特に、 に対する推測値が、分母 について観測されたすべての値の最小公倍数である場合、その推測は高い確率で正しいことになる。 直感的に言えば、 の値の中には、 と共通因数を持つため適切でないものがあり、 や を学習する際には、それらの共通因数が隠れてしまう。 しかし、 をランダムに選んでも、 の因数が長く隠されたままになることはまずなく、観察された分母の最小公倍数をとることで を正しく推測できない確率は、サンプル数の増加に伴い指数関数的に低下する。
あとは、位相推定手順を実行するための固有ベクトル 。 結局のところ、それを作る必要はないのだ!
その代わりに、状態 に対して位相推定手順を実行します。ここでとは、 の固有ベクトル の代わりに、数 の ビットの2進符号化を表します。 これまで、特定の固有ベクトルに対して位相推定手順を実行することについてのみ述べてきましたが、 の固有ベクトルではない入力状態に対してこの手順を実行することを妨げるものは何もなく、それがここで状態 に対して行っていることです。 ( でない限り、これは の固有ベクトルではありません。しかし、 というケースは、ここでは検討対象外です。)
の固有ベクトルの代わりに状態 を選ぶ根拠は、以下の式が成り立つからである。
この方程式を検証する一つの方法は、右辺の結果を評価するのに役立つように、レッスンで前に述べた公式を使用して、各標準基底状態で両辺の内積を比較することである。 その結果、 を一様にランダムに選び、それを固有ベクトルとして使った場合とまったく同じ測定結果が得られる。 を固有ベクトルとして使った場合と全く同じ測定結果が得られる。
より詳しく説明すると、固有ベクトル の1つの代わりに、状態 を用いて位相推定手順を実行すると仮定しましょう。 逆量子フーリエ変換を実行すると、その結果、以下の状態が得られます。
ここで
ベクトル は、量子フーリエ変換の逆変換を行った後のトップ の量子ビットの状態を表している。
従って、 が正規直交集合であるという事実により、 クビットのトップ を測定すると、 の値に近似することがわかる。 の測定は、 が一様にランダムに選ばれた値 の近似値 をもたらすことがわかります。 すでに説明したように、これによって、私たちの目標であった、何度かの独立した実行の後、高い信頼性をもって 。
合計コスト
各制御ユニタリ演算 の実行コストは、 である。 制御ユニタリ演算は 個あり、 であるため、制御ユニタリ演算の総コストは となる。 さらに、 個のハダマールゲートがあり(これによるコストは )、逆量子フーリエ変換によるコストは である。 したがって、制御ユニタリ演算の計算コストが手順全体の計算コストの大部分を占めることになり、その結果、 となる。
量子回路そのものに加え、その過程で実行する必要のあるいくつかの古典的な計算があります。 これには、制御ユニタリゲートを作成するために必要な、 における に対する の冪の計算に加え、 の近似値を分数に変換する連分数アルゴリズムも含まれます。 これらの計算は、総コストが のブール回路によって実行可能です。
典型的なように、これらの境界はすべて漸近的に高速なアルゴリズムを使って改善できる。これらの境界は、基本的な算術演算に標準的なアルゴリズムを使っていると仮定している。
受注ファクタリング
最後に論じなければならないのは、順序探索問題を解くことが因数分解にどのように役立つかということだ。 この部分は完全に古典的なもので、量子コンピューティングとは何の関係もない。
基本的な考え方は次のとおりです。 を因数分解したいのですが、これは再帰的に行うことができます。 具体的には、 を因数分解するという課題に焦点を当てることができます。これは、 を満たす任意の 2 つの整数 を見つけることを意味します。 が素数である場合はこれは不可能ですが、まず素数判定アルゴリズムを用いて が素数かどうかを効率的に判定し、 が素数でない場合は、その因数分解を試みます。 を因数分解したら、 および に対して再帰処理を繰り返すだけで、すべての因数が素数になるまで処理を進め、 の素因数分解を得ることができます。
偶数の整数を分解するのは簡単です。 と を出力すればよいのです。
また、整数 に対する の形をした完全冪を、 根を 、 、 などと近似し、 の候補として近傍の整数をチェックするだけで、簡単に分解することができます。 この数列を ステップ以上進める必要はありません。なぜなら、その時点で根は を下回り、それ以上の候補が現れなくなるからです。
これら両方ができるのは良いことです。なぜなら、順序を見つけるだけでは偶数や素数のべき乗を因数分解したり、 がたまたま素数である場合には役立たないからです。 ただし、 が奇数であり、かつ素数の冪でない場合、順序決定法を用いて を分解することができる。
-
をランダムに選択します。
-
を計算します。
-
の場合は、 および を出力して終了する。 それ以外の場合は、 であることを念頭に置いて、次の手順に進んでください。
-
を、 を で割った余りによる位数とする。 (ここで注文検索が必要になります。)
-
が偶数の場合:
5.1 を で割った余りを計算する。 5.2
を計算する。 5.3
であれば、 および を出力し、処理を終了する。 -
この段階に達した場合、アルゴリズムは の因数を見つけることに失敗したことになる。
このアルゴリズムを実行しても、 の因数が見つからない場合があります。 具体的には、次の 2 つの状況でこれが起こります:
- modulo の次数は奇数である。
- を で割った余りは偶数であり、 である。
基本的な整数論を用いれば、 をランダムに選んだ場合、少なくとも の確率で、これらの事象のいずれも起こらないことが証明できる。 実際、いずれかの事象が起こる確率は、 以下である。ここで、 は の異なる素因子の個数であり、 これが、 が素数の冪ではないという仮定が必要となる理由である。 (この事実が成り立つためには、 が奇数であるという仮定も必要となる。)
これは、各実行において、 を分割できる確率が少なくとも 50% あることを意味します。 したがって、アルゴリズムを 回実行し、そのたびに をランダムに選択すれば、 を分割することに成功する確率は、少なくとも となります。
アルゴリズムの基本的な考え方は以下の通りである。 modulo の次数 が偶数である の選択肢がある場合、 は整数であり、次のように考えることができる。 数
式 を用いると、次のことが導かれる
さて、順序の定義から、 であることがわかっています。これは、 が を割り切る、という別の言い方でもあります。 つまり、 がその積を割り切るということです。
これが真実であるためには、 の素因数のすべてが、 または の素因数(あるいはその両方)でもなければならない。 を無作為に選択した場合、 の素因数のすべてが一方の項を分割し、もう一方の項を分割することはありえないことがわかる。 そうでなければ、 の素因数のいくつかが第1項を分割し、いくつかが第2項を分割する限り、第1項とのGCDを計算することによって、 の自明でない因数を見つけることができる。