メインコンテンツへスキップ
このプロジェクトはベータ版です。バグを見つけましたか?GitHub Issueを開く。質問やアイデアがありますか?Discussionsで質問する — フィードバックをお待ちしています!
このページの翻訳品質はいかがですか?

ショアのアルゴリズム

次に、整数因数分解問題に注目し、位相推定を用いて量子コンピュータ上でこの問題を効率的に解く方法を見ていきましょう。 導出されるアルゴリズムが 整数因数分解のためのショアのアルゴリズム です。 ショアは自身のアルゴリズムを特に位相推定の言葉で説明していませんでしたが、その仕組みを説明するうえで自然かつ直感的なアプローチです。

まず、位数発見問題 と呼ばれる中間問題について説明し、位相推定がこの問題の解を与えることを確認します。 次に、位数発見問題の効率的な解が整数因数分解問題の効率的な解をもたらすことを見ていきます。 (ある問題の解が別の問題の解を与えるとき、後者の問題は前者に 帰着する と言います。ここでは整数因数分解を位数発見に帰着しています。) ショアのアルゴリズムのこの第二部分は量子計算をまったく使いません。完全に古典的です。 量子計算が必要なのは位数発見を解くためだけです。

位数発見問題​

初等整数論の基礎​

位数発見問題と、それを位相推定で解く方法を説明するために、まずいくつかの基本的な整数論の概念を確認し、便利な記法を導入しておきましょう。

はじめに、任意の正整数 NN に対して、集合 ZN\mathbb{Z}_N を次のように定義します。

ZN={0,1,…,N−1}\mathbb{Z}_N = \{0,1,\ldots,N-1\}

例えば、 Z1={0},  \mathbb{Z}_1 = \{0\},\; Z2={0,1},  \mathbb{Z}_2 = \{0,1\},\; Z3={0,1,2},  \mathbb{Z}_3 = \{0,1,2\},\; などとなります。

これらは数の集合ですが、単なる集合以上のものとして考えることができます。 特に、ZN\mathbb{Z}_N 上の 演算(加算や乗算など)を考えることができ、答えを常に NN で割った余り(すなわち NN を法とした剰余)として取ることで、これらの演算を施しても常にこの集合の中に留まります。 NN を法とした加算と乗算という二つの演算によって、ZN\mathbb{Z}_N は代数において基本的に重要なオブジェクトである 環 になります。

例えば、33 と 55 は Z7\mathbb{Z}_7 の元であり、これらを掛け合わせると 3⋅5=153\cdot 5 = 15 となり、これを 77 で割ると余りが 11 になります。 これを次のように表すことがあります。

3⋅5≡1  (mod 7)3 \cdot 5 \equiv 1 \; (\textrm{mod } 7)

ただし、Z7\mathbb{Z}_7 内で計算していることが明確な場合は、記法を簡潔にするために単に 3⋅5=13 \cdot 5 = 1 と書くこともできます。

例として、Z6\mathbb{Z}_6 の加算表と乗算表を示します。

+012345001234511234502234501334501244501235501234⋅012345000000010123452024024303030340420425054321\begin{array}{c|cccccc} + & 0 & 1 & 2 & 3 & 4 & 5 \\\hline 0 & 0 & 1 & 2 & 3 & 4 & 5 \\ 1 & 1 & 2 & 3 & 4 & 5 & 0 \\ 2 & 2 & 3 & 4 & 5 & 0 & 1 \\ 3 & 3 & 4 & 5 & 0 & 1 & 2 \\ 4 & 4 & 5 & 0 & 1 & 2 & 3 \\ 5 & 5 & 0 & 1 & 2 & 3 & 4 \\ \end{array} \qquad \begin{array}{c|cccccc} \cdot & 0 & 1 & 2 & 3 & 4 & 5 \\\hline 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 1 & 0 & 1 & 2 & 3 & 4 & 5 \\ 2 & 0 & 2 & 4 & 0 & 2 & 4 \\ 3 & 0 & 3 & 0 & 3 & 0 & 3 \\ 4 & 0 & 4 & 2 & 0 & 4 & 2 \\ 5 & 0 & 5 & 4 & 3 & 2 & 1 \\ \end{array}

ZN\mathbb{Z}_N の NN 個の元のうち、gcd⁡(a,N)=1\gcd(a,N) = 1 を満たす元 a∈ZNa\in\mathbb{Z}_N は特別です。 これらの元からなる集合は、しばしば次のようにアスタリスクを用いて表されます。

ZN∗={a∈ZN:gcd⁡(a,N)=1}\mathbb{Z}_N^{\ast} = \{a\in \mathbb{Z}_N : \gcd(a,N) = 1\}

乗算という演算に注目すると、集合 ZN∗\mathbb{Z}_N^{\ast} は 群、とりわけ アーベル群 を形成します。これも代数において重要なオブジェクトの一つです。 これらの集合(および有限群一般)についての基本的な事実として、任意の元 a∈ZN∗a\in\mathbb{Z}_N^{\ast} を選んで aa を繰り返し自身に掛けていくと、いずれ必ず 11 が得られます。

最初の例として、N=6N=6 を取りましょう。 gcd⁡(5,6)=1\gcd(5,6) = 1 なので 5∈Z6∗5\in\mathbb{Z}_6^{\ast} であり、55 を自身に掛けると 11 が得られます。これは上の表からも確認できます。

52=1(working within Z6)5^2 = 1 \quad \text{(working within $\mathbb{Z}_6$)}

第二の例として、N=21N = 21 を取りましょう。 00 から 2020 までの数の中で、2121 との GCD が 11 になるものは次の通りです。

Z21∗={1,2,4,5,8,10,11,13,16,17,19,20}\mathbb{Z}_{21}^{\ast} = \{1,2,4,5,8,10,11,13,16,17,19,20\}

これらの元それぞれについて、その数を正整数乗すると 11 が得られます。 その最小の乗数を示すと次の通りです。

11=182=1163=126=1106=1176=143=1116=1196=156=1132=1202=1\begin{array}{ccc} 1^{1} = 1 \quad & 8^{2} = 1 \quad & 16^{3} = 1 \\[1mm] 2^{6} = 1 \quad & 10^{6} = 1 \quad & 17^{6} = 1 \\[1mm] 4^{3} = 1 \quad & 11^{6} = 1 \quad & 19^{6} = 1 \\[1mm] 5^{6} = 1 \quad & 13^{2} = 1 \quad & 20^{2} = 1 \end{array}

これらの等式はすべて Z21\mathbb{Z}_{21} 内での計算であることは省略しています。記述を煩雑にしないよう、以後のレッスン全体でもこれを暗黙の前提とします。

問題の定式化と位相推定との関係​

これで位数発見問題を定式化できます。

位数発見

入力: gcd⁡(N,a)=1\gcd(N,a) = 1 を満たす正整数 NN と aa
出力: ar≡1a^r \equiv 1 (mod N)(\textrm{mod } N) を満たす最小の正整数 rr

あるいは、先ほど導入した記法では、a∈ZN∗a \in \mathbb{Z}_N^{\ast} が与えられ、ar=1a^r = 1 を満たす最小の正整数 rr を求めることになります。 この数 rr を、aa の NN を法とした 位数 と呼びます。

位数発見問題を位相推定と結び付けるために、古典的な状態が ZN\mathbb{Z}_N に対応するシステムに対して、固定した元 a∈ZN∗a\in\mathbb{Z}_N^{\ast} で乗算する演算を考えましょう。

Ma∣x⟩=∣ax⟩(for each x∈ZN)M_a \vert x\rangle = \vert ax \rangle \qquad \text{(for each $x\in\mathbb{Z}_N$)}

明確にしておくと、ZN\mathbb{Z}_N 内での乗算を行っているので、右辺のケットの内側の積が NN を法としていることは暗黙の前提です。

例えば、N=15N = 15、a=2a=2 とすると、M2M_2 の標準基底 {∣0⟩,…,∣14⟩}\{\vert 0\rangle,\ldots,\vert 14\rangle\} への作用は次の通りです。

M2∣0⟩=∣0⟩M2∣5⟩=∣10⟩M2∣10⟩=∣5⟩M2∣1⟩=∣2⟩M2∣6⟩=∣12⟩M2∣11⟩=∣7⟩M2∣2⟩=∣4⟩M2∣7⟩=∣14⟩M2∣12⟩=∣9⟩M2∣3⟩=∣6⟩M2∣8⟩=∣1⟩M2∣13⟩=∣11⟩M2∣4⟩=∣8⟩M2∣9⟩=∣3⟩M2∣14⟩=∣13⟩\begin{array}{ccc} M_{2} \vert 0 \rangle = \vert 0\rangle \quad & M_{2} \vert 5 \rangle = \vert 10\rangle \quad & M_{2} \vert 10 \rangle = \vert 5\rangle \\[1mm] M_{2} \vert 1 \rangle = \vert 2\rangle \quad & M_{2} \vert 6 \rangle = \vert 12\rangle \quad & M_{2} \vert 11 \rangle = \vert 7\rangle \\[1mm] M_{2} \vert 2 \rangle = \vert 4\rangle \quad & M_{2} \vert 7 \rangle = \vert 14\rangle \quad & M_{2} \vert 12 \rangle = \vert 9\rangle \\[1mm] M_{2} \vert 3 \rangle = \vert 6\rangle \quad & M_{2} \vert 8 \rangle = \vert 1\rangle \quad & M_{2} \vert 13 \rangle = \vert 11\rangle \\[1mm] M_{2} \vert 4 \rangle = \vert 8\rangle \quad & M_{2} \vert 9 \rangle = \vert 3\rangle \quad & M_{2} \vert 14 \rangle = \vert 13\rangle \end{array}

gcd⁡(a,N)=1\gcd(a,N)=1 のとき、この演算はユニタリです。標準基底 {∣0⟩,…,∣N−1⟩}\{\vert 0\rangle,\ldots,\vert N-1\rangle\} の元を並べ替えるため、行列として見ると置換行列となります。 定義から明らかにこの演算は決定論的であり、逆演算が存在することを確認する簡単な方法は、aa の NN を法とした位数 rr を考え、MaM_a の逆演算が Mar−1M_a^{r-1} であることに気づくことです。

Mar−1Ma=Mar=Mar=M1=IM_a^{r-1} M_a = M_a^r = M_{a^r} = M_1 = \mathbb{I}

逆元について考えるもう一つの方法があり、これはrrについての知識を必要としません(そもそもそれこそが私たちが計算しようとしているものです)。 ZN∗\mathbb{Z}_N^{\ast}の各元aaに対して、ab=1ab=1を満たす一意な元b∈ZN∗b\in\mathbb{Z}_N^{\ast}が常に存在します。 この元bbをa−1a^{-1}と表記し、効率的に計算することができます。 ユークリッドの互除法アルゴリズムの拡張版により、lg⁡(N)\operatorname{lg}(N)に対して2次のコストで計算できます。 そして

Ma−1Ma=Ma−1a=M1=I.M_{a^{-1}} M_a = M_{a^{-1}a} = M_1 = \mathbb{I}.

したがって、演算MaM_aは決定的かつ可逆です。 これは、置換行列によって記述されることを意味し、したがってユニタリーです。

以上より、演算 MaM_a は決定論的かつ可逆です。 これは MaM_a が置換行列で表されることを意味し、したがってユニタリです。

では、a∈ZN∗a\in\mathbb{Z}_N^{\ast} を仮定した上で、演算 MaM_a の固有ベクトルと固有値について考えましょう。 今述べたように、この仮定から MaM_a がユニタリであることがわかります。

∣ψ0⟩=∣1⟩+∣a⟩+⋯+∣ar−1⟩r\vert \psi_0 \rangle = \frac{\vert 1 \rangle + \vert a \rangle + \cdots + \vert a^{r-1} \rangle}{\sqrt{r}}

数rrは、以降このレッスンを通じて、aaの法NNに関する位数です。 この固有ベクトルに対応する固有値は11です。なぜなら、aaを掛けても変化しないからです。

Ma∣ψ0⟩=∣a⟩+⋯+∣ar−1⟩+∣ar⟩r=∣a⟩+⋯+∣ar−1⟩+∣1⟩r=∣ψ0⟩M_a \vert \psi_0 \rangle = \frac{\vert a \rangle + \cdots + \vert a^{r-1} \rangle + \vert a^r \rangle}{\sqrt{r}} = \frac{\vert a \rangle + \cdots + \vert a^{r-1} \rangle + \vert 1 \rangle}{\sqrt{r}} = \vert \psi_0 \rangle

これは、ar=1a^r = 1であるために起こります。すなわち、各標準基底状態∣ak⟩\vert a^k \rangleはk≤r−1k\leq r-1について∣ak+1⟩\vert a^{k+1} \rangleにシフトされ、∣ar−1⟩\vert a^{r-1} \rangleは∣1⟩\vert 1\rangleに戻ってシフトされます。 非公式に言えば、私たちは∣ψ0⟩\vert \psi_0 \rangleをゆっくりとかき混ぜているようなものですが、すでに完全にかき混ぜられているため、何も変化しません。

ここに、MaM_aのもう一つの固有ベクトルの例があります。 こちらは、位数探索と位相推定の文脈においてより興味深いものです。

∣ψ1⟩=∣1⟩+ωr−1∣a⟩+⋯+ωr−(r−1)∣ar−1⟩r\vert \psi_1 \rangle = \frac{\vert 1 \rangle + \omega_r^{-1} \vert a \rangle + \cdots + \omega_r^{-(r-1)}\vert a^{r-1} \rangle}{\sqrt{r}}

あるいは、このベクトルを次のように総和を使って書くこともできます。

∣ψ1⟩=1r∑k=0r−1ωr−k∣ak⟩\vert \psi_1 \rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \omega_r^{-k} \vert a^k \rangle

ここで、複素数ωr=e2πi/r\omega_r = e^{2\pi i/r}が自然に現れているのがわかります。これは、法NNの下でのaaによる乗算の仕組みによるものです。 今回は、対応する固有値はωr\omega_rです。 これを見るために、まず次のように計算してみましょう。

Ma∣ψ1⟩=1r∑k=0r−1ωr−kMa∣ak⟩=1r∑k=0r−1ωr−k∣ak+1⟩=1r∑k=1rωr−(k−1)∣ak⟩=1rωr∑k=1rωr−k∣ak⟩M_a \vert \psi_1 \rangle = \frac{1}{\sqrt{r}}\sum_{k = 0}^{r-1} \omega_r^{-k} M_a\vert a^k \rangle = \frac{1}{\sqrt{r}}\sum_{k = 0}^{r-1} \omega_r^{-k} \vert a^{k+1} \rangle = \frac{1}{\sqrt{r}}\sum_{k = 1}^{r} \omega_r^{-(k - 1)} \vert a^{k} \rangle = \frac{1}{\sqrt{r}}\omega_r \sum_{k = 1}^{r} \omega_r^{-k} \vert a^{k} \rangle

次に、ωr−r=1=ωr0\omega_r^{-r} = 1 = \omega_r^0かつ∣ar⟩=∣1⟩=∣a0⟩\vert a^r \rangle = \vert 1\rangle = \vert a^0\rangleであるため、次のことがわかります。

1r∑k=1rωr−k∣ak⟩=1r∑k=0r−1ωr−k∣ak⟩=∣ψ1⟩,\frac{1}{\sqrt{r}}\sum_{k = 1}^{r} \omega_r^{-k} \vert a^{k} \rangle = \frac{1}{\sqrt{r}}\sum_{k = 0}^{r-1} \omega_r^{-k} \vert a^k \rangle = \vert\psi_1\rangle,

so Ma∣ψ1⟩=ωr∣ψ1⟩M_a \vert\psi_1\rangle = \omega_r \vert\psi_1\rangle.

同じ推論を用いて、MaM_a に対する追加の固有ベクトル/固有値のペアを特定できます。 任意の j∈{0,…,r−1}j\in\{0,\ldots,r-1\} に対して、次のベクトル

∣ψj⟩=1r∑k=0r−1ωr−jk∣ak⟩\vert \psi_j \rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \omega_r^{-jk} \vert a^k \rangle

は、対応する固有値がωrj\omega_r^jであるMaM_aの固有ベクトルです。

Ma∣ψj⟩=ωrj∣ψj⟩M_a \vert \psi_j \rangle = \omega_r^j \vert \psi_j \rangle

MaM_aには他にも固有ベクトルがありますが、それらについて気にする必要はありません——今しがた特定した固有ベクトル∣ψ0⟩,…,∣ψr−1⟩\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangleのみに注目します。

位相推定による位数発見​

与えられたa∈ZN∗a\in\mathbb{Z}_N^{\ast}の選択に対して位数探索問題を解くには、演算MaM_aに位相推定手順を適用することができます。

これを行うには、量子回路で MaM_a を効率的に実装するだけでなく、Ma2M_a^2、Ma4M_a^4、Ma8M_a^8 なども、位相推定手順から十分に精度の高い推定値を得るために必要な分だけ実装する必要があります。 ここではこれをどのように実現できるかを説明し、必要な精度がどれほどかは後で正確に確認します。

まずは演算MaM_a自体から始めましょう。 当然ながら、量子回路モデルで作業しているので、00からN−1N-1までの数を符号化するには二進記法を使います。 符号化する必要がある最大の数はN−1N-1なので、必要なビット数は

n=lg⁡(N−1)=⌊log⁡(N−1)⌋+1.n = \operatorname{lg}(N-1) = \lfloor \log(N-1) \rfloor + 1.

例えば、N=21N = 21 の場合は n=lg⁡(N−1)=5n = \operatorname{lg}(N-1) = 5 です。 Z21\mathbb{Z}_{21} の元を長さ 55 の2進数文字列として符号化すると次のようになります。

0↦000001↦00001⋮20↦10100\begin{gathered} 0 \mapsto 00000\\[1mm] 1 \mapsto 00001\\[1mm] \vdots\\[1mm] 20 \mapsto 10100 \end{gathered}

そして、MaM_a を nn 量子ビット演算として定義した正確な定義を示します。

Ma∣x⟩={∣ax  (mod  N)⟩0≤x<N∣x⟩N≤x<2nM_a \vert x\rangle = \begin{cases} \vert ax \; (\textrm{mod}\;N)\rangle & 0\leq x < N\\[1mm] \vert x\rangle & N\leq x < 2^n \end{cases}

ここで重要なのは、MaM_a がどのように機能するかは ∣0⟩,…,∣N−1⟩\vert 0\rangle,\ldots,\vert N-1\rangle に対してのみ関心がありますが、残りの 2n−N2^n - N 個の標準基底状態に対しても動作を指定する必要があり、それがユニタリ演算となるようにしなければならないことです。 残りの標準基底状態に対して MaM_a が何もしないと定義することでこれを実現できます。

前のレッスンで説明した整数乗算・除算のアルゴリズムと、それらのリバーシブルかつガベージフリーな実装の方法論を用いることで、任意の a∈ZN∗a\in\mathbb{Z}_N^{\ast} に対して O(n2)O(n^2) のコストで MaM_a を実行する量子回路を構築できます。 その実現方法の一つを以下に示します。

  1. 次の演算を実行する回路を構築します

    ∣x⟩∣y⟩↦∣x⟩∣y⊕fa(x)⟩\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \vert y \oplus f_a(x)\rangle

    を実行する回路を構築します。ここで

    fa(x)={ax  (mod  N)0≤x<NxN≤x<2nf_a(x) = \begin{cases} ax \; (\textrm{mod}\;N) & 0\leq x < N\\[1mm] x & N\leq x < 2^n \end{cases}

    前のレッスンで説明した方法を使います。これにより O(n2)O(n^2) のサイズの回路が得られます。

  2. nn 個のスワップゲートを使って2つの nn 量子ビットシステムを入れ替えます(量子ビットを個別にスワップします)。

  3. 最初のステップと同様に、次の演算

    ∣x⟩∣y⟩↦∣x⟩∣y⊕fa−1(x)⟩\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \bigl\vert y \oplus f_{a^{-1}}(x)\bigr\rangle

    のための回路を構築します。ここで a−1a^{-1} は ZN∗\mathbb{Z}_N^{\ast} における aa の逆元です。

下側の nn 量子ビットを初期化して3つのステップを合成すると、次の変換が得られます。

∣x⟩∣0n⟩↦ステップ1∣x⟩∣fa(x)⟩↦ステップ2∣fa(x)⟩∣x⟩↦ステップ3∣fa(x)⟩∣x⊕fa−1(fa(x))⟩=∣fa(x)⟩∣0n⟩\vert x \rangle \vert 0^n \rangle \stackrel{\text{ステップ1}}{\mapsto} \vert x \rangle \vert f_a(x)\rangle \stackrel{\text{ステップ2}}{\mapsto} \vert f_a(x)\rangle \vert x \rangle \stackrel{\text{ステップ3}}{\mapsto} \vert f_a(x)\rangle \bigl\vert x \oplus f_{a^{-1}}(f_a(x)) \bigr\rangle = \vert f_a(x)\rangle\vert 0^n \rangle

この方法はワークスペース量子ビットを必要としますが、最終的に初期化された状態に戻されるため、位相推定にこれらの回路を使用できます。 得られる回路の総コストは O(n2)O(n^2) です。

Ma2M_a^2、Ma4M_a^4、Ma8M_a^8 などを実行するには、全く同じ方法を使えます。ただし、aa を ZN∗\mathbb{Z}_N^{\ast} の元として a2a^2、a4a^4、a8a^8 などに置き換えます。 すなわち、任意の冪 kk に対して、MaM_a の回路を kk 回繰り返すのではなく、b=ak∈ZN∗b = a^k \in \mathbb{Z}_N^{\ast} を計算して MbM_b の回路を使うことで MakM_a^k の回路を作成できます。

冪 ak∈ZNa^k \in \mathbb{Z}_N の計算は、前のレッスンで言及した モジュラー冪乗 問題です。 この計算は前のレッスンで言及したモジュラー冪乗アルゴリズム(計算的数論では 冪アルゴリズム とも呼ばれる)を用いて 古典的に 実行できます。 実際に必要なのは aa の 2の冪乗 のみ、具体的には a2,a4,…a2m−1∈ZN∗a^2, a^4, \ldots a^{2^{m-1}} \in \mathbb{Z}_N^{\ast} であり、これらは m−1m-1 回の反復的な平方演算によって得られます。 各平方演算は O(n2)O(n^2) のサイズのブール回路で実行できます。

本質的に、ここで行っているのは、MaM_a を最大 2m−12^{m-1} 回繰り返す問題を効率的な古典計算にオフロードすることです。 そしてこれが可能であることは幸運なことです! 位相推定問題における量子回路の任意の選択では、これが可能でない場合が多く、その場合の位相推定のコストは制御量子ビット数 mm に対して 指数的 に増大します。

都合のよい固有ベクトルが与えられた場合の解法​

位相推定を使って位数発見問題をどのように解けるかを理解するために、まず操作 MaM_a に固有ベクトル ∣ψ1⟩\vert\psi_1\rangle を用いて位相推定の手順を実行する場合を考えてみましょう。 実はこの固有ベクトルを手に入れることは容易ではないため、これが話の終わりではありませんが、ここから始めるのが理解の助けになります。

固有ベクトル ∣ψ1⟩\vert \psi_1\rangle に対応する MaM_a の固有値は

ωr=e2πi1r.\omega_r = e^{2\pi i \frac{1}{r}}.

です。つまり、θ=1/r\theta = 1/r として ωr=e2πiθ\omega_r = e^{2\pi i \theta} となります。 したがって、固有ベクトル ∣ψ1⟩\vert\psi_1\rangle を使って MaM_a に対して位相推定を実行すると、1/r1/r の近似値が得られます。 その逆数を計算することで、近似が十分に精度よければ rr を求めることができます。

さらに詳しく説明すると、mm 個の制御量子ビットを使って位相推定の手順を実行した場合、得られるのは y∈{0,…,2m−1}y\in\{0,\ldots,2^m-1\} という数です。 次に y/2my/2^m を θ\theta の推定値とします。今の場合、θ=1/r\theta = 1/r です。 この近似から rr を求めるには、近似の逆数を取って最近傍の整数に丸めるのが自然な方法です。

⌊2my+12⌋\left\lfloor \frac{2^m}{y} + \frac{1}{2} \right\rfloor

例えば、r=6r = 6 の場合に固有ベクトル ∣ψ1⟩\vert\psi_1\rangle を用いて m=5m = 5 個の制御ビットで MaM_a に対する位相推定を行うとしましょう。 1/r=1/61/r = 1/6 に対する最良の 55 ビット近似は 5/325/32 であり、位相推定から結果 y=5y=5 が得られる確率はかなり高く(この場合約 68%68\%)なります。 このとき

2my=325=6.4,\frac{2^m}{y} = \frac{32}{5} = 6.4,

となり、最近傍の整数に丸めると 66 が得られ、これは正しい答えです。

一方、精度が不十分な場合は正しい答えが得られないこともあります。 例えば、位相推定で m=4m = 4 個の制御量子ビットを使った場合、1/r=1/61/r = 1/6 に対する最良の 44 ビット近似である 3/163/16 が得られる可能性があります。 その逆数を取ると

2my=163=5.333⋯\frac{2^m}{y} = \frac{16}{3} = 5.333 \cdots

となり、最近傍の整数に丸めると誤った答えの 55 が得られてしまいます。

では、正しい答えを得るためにはどれほどの精度が必要でしょうか? 位数 rr は整数であることがわかっており、直感的には 1/r1/r を近傍の候補(1/(r+1)1/(r+1) や 1/(r−1)1/(r-1) を含む)と区別できるだけの精度が必要です。 1/r1/r に最も近い、注意すべき数は 1/(r+1)1/(r+1) であり、これら2つの数の距離は

1r−1r+1=1r(r+1).\frac{1}{r} - \frac{1}{r+1} = \frac{1}{r(r+1)}.

そこで、1/r1/rと1/(r+1)1/(r+1)を取り違えないようにするには、1/r1/rへの最良近似y/2my/2^mが1/(r+1)1/(r+1)よりも1/r1/rに近いことを保証するのに十分な精度を使えばよいことになります。 次を満たすのに十分な精度を使う場合

∣y2m−1r∣<12r(r+1),\left\vert \frac{y}{2^m} - \frac{1}{r} \right\vert < \frac{1}{2 r (r+1)},

すると、誤差が1/r1/rと1/(r+1)1/(r+1)の間の距離の半分未満になるため、y/2my/2^mは1/(r+1)1/(r+1)や1/(r−1)1/(r-1)を含む他のどの可能性よりも1/r1/rに近くなります。

これは次のようにして再確認できます。 次のように仮定しましょう。

y2m=1r+ε\frac{y}{2^m} = \frac{1}{r} + \varepsilon

次を満たすε\varepsilonについて

∣ε∣<12r(r+1).\vert\varepsilon\vert < \frac{1}{2 r (r+1)}.

逆数を取ると、次が得られます。

2my=11r+ε=r1+εr=r−εr21+εr.\frac{2^m}{y} = \frac{1}{\frac{1}{r} + \varepsilon} = \frac{r}{1+\varepsilon r} = r - \frac{\varepsilon r^2}{1+\varepsilon r}.

分子を最大化し、分母を最小化することで、rrからどれだけ離れているかを次のように評価することができます。

∣εr21+εr∣≤r22r(r+1)1−r2r(r+1)=r2r+1<12\left\vert \frac{\varepsilon r^2}{1+\varepsilon r} \right\vert \leq \frac{ \frac{r^2}{2 r(r+1)}}{1 - \frac{r}{2r(r+1)}} %= \frac{r^2}{2 r (r+1) - r} = \frac{r}{2 r + 1} < \frac{1}{2}

rrから1/21/2未満しか離れていないので、予想通り、四捨五入するとrrが得られます。

残念ながら、rrがまだわかっていないため、どれだけの精度が必要かを知るためにそれを使うことはできません。 その代わりにできることは、十分な精度を確保するために、rrがNNより小さいという事実を利用することです。 特に、1/r1/rへの最良近似y/2my/2^mが次を満たすのに十分な精度を使えば

∣y2m−1r∣≤12N2,\left\vert \frac{y}{2^m} - \frac{1}{r} \right\vert \leq \frac{1}{2N^2},

逆数を取った際にrrを正しく決定するのに十分な精度が得られます。 m=2lg⁡(N)+1m = 2\operatorname{lg}(N)+1とすることで、前述の方法を用いてこの精度の推定値を高い確率で得ることができます。 (成功確率の下限が40%で構わないのであれば、m=2lg⁡(N)m = 2\operatorname{lg}(N)でも十分です。)

一般的な解法​

一時的に、∣ψ1⟩\vert\psi_1\rangle の代わりに任意の k∈{0,…,r−1}k\in\{0,\ldots,r-1\} に対する固有ベクトル ∣ψk⟩\vert\psi_k\rangle を用いて同様に進めると仮定しましょう。 位相推定の手順から得られる結果は、近似値

ここで、上記と同様に進めるが、∣ψ1⟩\vert\psi_1\rangleの代わりに固有ベクトル∣ψk⟩\vert\psi_k\rangleを用いる場合を、考えたい任意のk∈{0,…,r−1}k\in\{0,\ldots,r-1\}について一時的に考えてみましょう。 位相推定手順から得られる結果は、次の近似になります。

y2m≈kr.\frac{y}{2^m} \approx \frac{k}{r}.

kk も rr もわからないという前提で考えると、これが rr の特定につながる場合もあればそうでない場合もあります。 例えば、k=0k = 0 の場合は 00 の近似値 y/2my/2^m が得られますが、残念ながらこれからは何もわかりません。 ただし、これは例外的なケースであり、kk が非ゼロの値であれば、少なくとも rr に関する何らかの情報を得ることができます。

連分数アルゴリズムと呼ばれるアルゴリズムを使うと、近似値 y/2my/2^m を近傍の分数に変換できます。近似が十分に精度よければ k/rk/r も求めることができます。 ここでは連分数アルゴリズムの説明は省略します。 代わりに、このアルゴリズムに関する既知の事実を述べます。

事実

整数 N≥2N\geq 2 と実数 α∈(0,1)\alpha\in(0,1) が与えられたとき、v≠0v\neq 0 かつ gcd⁡(u,v)=1\gcd(u,v)=1 を満たし、∣α−u/v∣<12N2\vert \alpha - u/v\vert < \frac{1}{2N^2} を満たす整数 u,v∈{0,…,N−1}u,v\in\{0,\ldots,N-1\} の選択は高々1つしか存在しません。 α\alpha と NN が与えられると、連分数アルゴリズムは uu と vv を求めるか、それらが存在しないことを報告します。 このアルゴリズムは O((lg⁡(N))3)O((\operatorname{lg}(N))^3) のサイズを持つブール回路として実装できます。

k/rk/r に対する非常に精度の高い近似 y/2my/2^m があり、NN と α=y/2m\alpha = y/2^m に対して連分数アルゴリズムを実行すると、事実に記載された uu と vv が得られます。 この事実の分析から、次の結論が導かれます。

uv=kr.\frac{u}{v} = \frac{k}{r}.

特に注意すべき点として、必ずしも kk と rr を個別に学習するわけではなく、既約分数の形で k/rk/r のみを学習することになります。

例えば、すでに述べたように、k=0k=0 からは何も学べません。 ただし、それが起きるのは k=0k=0 の場合だけです。 kk が非ゼロの場合、kk と rr の間に公約数があるかもしれませんが、連分数アルゴリズムで得られる vv は少なくとも rr の約数になります。

自明ではありませんが、k∈{0,…,r−1}k\in\{0,\ldots,r-1\} を一様ランダムに選んで u/v=k/ru/v = k/r の uu と vv を学習できる能力があれば、数回のサンプリングで高確率に rr を復元できることは事実です。 具体的には、観測した分母 vv のすべての値の最小公倍数を rr の推定値とすれば、高い確率で正解になります。 直感的に言えば、kk の値によっては rr との公約数があるために都合が悪く、uu と vv を学習しても rr の因数が隠されてしまうことがあります。 しかし、ランダムな kk の選択は長期間 rr の因数を隠し続けることはほぼなく、観測した分母の最小公倍数による推定が失敗する確率は、サンプル数の増加に対して指数関数的に減少します。

残る問題は、位相推定を実行するための MaM_a の固有ベクトル ∣ψk⟩\vert\psi_k\rangle をどのように手に入れるかです。 実は、固有ベクトルを実際に準備する必要はないのです!

代わりに行うのは、固有ベクトル ∣ψ⟩\vert\psi\rangle の代わりに、数 11 の nn ビット二進数表現を意味する状態 ∣1⟩\vert 1\rangle を用いて位相推定を実行することです。 これまでは特定の固有ベクトルに対して位相推定を実行することについてのみ説明しましたが、MaM_a の固有ベクトルでない入力状態に対して手順を実行することも問題ありません。ここではまさにその状態 ∣1⟩\vert 1\rangle を用いています。 (a=1a=1 でない限り、これは MaM_a の固有ベクトルではありませんが、a=1a=1 は興味の対象となる選択ではありません。)

MaM_a の固有ベクトルの代わりに状態 ∣1⟩\vert 1\rangle を選ぶ根拠は、次の等式が成り立つことです。

∣1⟩=1r∑k=0r−1∣ψk⟩\vert 1\rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \vert \psi_k\rangle

この等式を確認する一つの方法は、両辺と各標準基底状態の内積を比較することです。右辺の評価には、本レッスンで前述した公式を活用します。 この結果として、k∈{0,…,r−1}k\in\{0,\ldots,r-1\} を一様ランダムに選んで固有ベクトル ∣ψk⟩\vert\psi_k\rangle を使った場合とまったく同じ測定結果が得られます。

さらに詳しく説明すると、固有ベクトル ∣ψk⟩\vert\psi_k\rangle の1つの代わりに状態 ∣1⟩\vert 1\rangle を用いて位相推定を実行するとしましょう。 逆量子フーリエ変換が実行された後、残る状態は

1r∑k=0r−1∣ψk⟩∣γk⟩,\frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \vert \psi_k\rangle \vert \gamma_k\rangle,

となります。ここで

∣γk⟩=12m∑y=02m−1∑x=02m−1e2πix(k/r−y/2m)∣y⟩.\vert\gamma_k\rangle = \frac{1}{2^m} \sum_{y=0}^{2^m - 1} \sum_{x=0}^{2^m-1} e^{2\pi i x (k/r - y/2^m)} \vert y\rangle.

です。ベクトル ∣γk⟩\vert\gamma_k\rangle は、逆量子フーリエ変換が適用された後の上位 mm 量子ビットの状態を表しています。

したがって、{∣ψ0⟩,…,∣ψr−1⟩}\{\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle\} が正規直交集合であるという事実から、上位 mm 量子ビットの測定により、k∈{0,…,r−1}k\in\{0,\ldots,r-1\} が一様ランダムに選ばれた値 k/rk/r に対する近似値 y/2my/2^m が得られることがわかります。 すでに述べたように、これにより複数回の独立した実行を経て高い確信度で rr を求めることができ、これが目標でした。

総コスト​

各制御ユニタリ MakM_a^k を実装するコストは O(n2)O(n^2) です。 制御ユニタリ演算は mm 個あり、m=O(n)m = O(n) ですので、制御ユニタリ演算の総コストは O(n3)O(n^3) となります。 さらに、mm 個のアダマールゲート(コストへの寄与は O(n)O(n))と、O(n2)O(n^2) を寄与する逆量子フーリエ変換があります。 したがって、制御ユニタリ演算のコストが手順全体のコストを支配し、全体コストは O(n3)O(n^3) となります。

量子回路自体に加えて、途中でいくつかの古典的計算も必要です。 これには、制御ユニタリゲートの作成に必要な ZN\mathbb{Z}_N における冪 aka^k(k=2,4,8,…,2m−1k = 2, 4, 8, \ldots, 2^{m-1})の計算、および θ\theta の近似値を分数に変換する連分数アルゴリズムが含まれます。 これらの計算は、総コスト O(n3)O(n^3) のブール回路で実行できます。

通常のケースと同様に、漸近的に高速なアルゴリズムを使用することでこれらの上限をすべて改善できます。上記の上限は基本的な算術演算に標準的なアルゴリズムを使用していると仮定しています。

位数発見による素因数分解​

最後に議論すべきことは、位数発見問題を解くことが素因数分解にどのように役立つかです。 この部分は完全に古典的なものであり、量子計算とは直接関係しません。

基本的な考え方は以下のとおりです。 数 NN を素因数分解したいと考えており、これを再帰的に行うことができます。 具体的には、NN の分割(任意の2つの整数 b,c≥2b,c\geq 2 で N=bcN = bc を満たすものを見つけること)に集中できます。 NN が素数の場合はこれが不可能ですが、まず素数判定アルゴリズムで NN が素数かどうかを効率的に確認でき、素数でなければ分割を試みます。 NN を分割したら、bb と cc に対して再帰を繰り返し、すべての因数が素数になって NN の素因数分解が得られるまで続けます。

偶数の分割は簡単で、22 と N/2N/2 を出力するだけです。

完全冪数、すなわち整数 s,j≥2s,j\geq 2 に対して N=sjN = s^j の形の数の分割も容易です。 N1/2,N^{1/2}, N1/3,N^{1/3}, N1/4N^{1/4} などの根を近似し、ss の候補として近傍の整数を確認することで行えます。 根が 22 を下回って追加の候補が現れなくなるため、この数列の log⁡(N)\log(N) ステップ先まで調べれば十分です。

これらの両方ができることは重要です。位数発見は偶数の因数分解や、ss が素数である素数冪の因数分解には役立たないからです。 しかし、NN が奇数かつ素数冪でない場合は、位数発見を使って NN を分割することができます。

素数冪でない奇数の合成数 N を分割する確率的アルゴリズム

1.a∈{2,…,N−1}.a\in\{2,\ldots,N-1\} をランダムに選ぶ。 2.d=gcd⁡(a,N).d=\gcd(a,N) を計算する。 3.d>1.d > 1 ならば b=db = d と c=N/dc = N/d を出力して終了する。そうでなければ a∈ZN∗a\in\mathbb{Z}_N^{\ast} であることがわかっているので次のステップへ進む。 4.r.r を aa の NN に対する位数とする(ここで位数発見が必要になります)。 5.r.r が偶数の場合:

5.1 x=ar/2−1x = a^{r/2} - 1(NN を法として)を計算する
5.2 d=gcd⁡(x,N)d = \gcd(x,N) を計算する。
5.3 d>1d>1 ならば b=db=d と c=N/dc = N/d を出力して終了する。

  1. この地点に達した場合、アルゴリズムは NN の因数を見つけることに失敗しています。

このアルゴリズムの実行は NN の因数を見つけることに失敗する場合があります。 具体的には、次の2つの状況で失敗します。

  • aa の NN に対する位数が奇数である。
  • aa の NN に対する位数が偶数であり、gcd⁡(ar/2−1,N)=1\gcd\bigl(a^{r/2} - 1, N\bigr) = 1 である。

基本的な整数論を用いると、ランダムな aa の選択に対して、少なくとも 1/21/2 の確率でこれらのいずれの事象も起きないことが証明できます。 実際、どちらかの事象が起きる確率は 2−(m−1)2^{-(m-1)} 以下であり、ここで mm は NN の異なる素因数の数です。 これが NN が素数冪でないという仮定が必要な理由です。 (NN が奇数であるという仮定も、この事実が成立するために必要です。)

つまり、各実行で NN を分割できる確率は少なくとも 50% です。 したがって、aa をそれぞれランダムに選びながらアルゴリズムを tt 回実行すれば、少なくとも 1−2−t1 - 2^{-t} の確率で NN の分割に成功します。

このアルゴリズムの背後にある基本的な考え方は次の通りです。 aaの法NNに関する位数rrが偶数であるようなaaの選択がある場合、r/2r/2は整数であり、次の数を考えることができます。

ar/2−1  (mod  N)andar/2+1  (mod  N).a^{r/2} - 1\; (\textrm{mod}\; N) \quad \text{and} \quad a^{r/2} + 1\; (\textrm{mod}\; N).

公式 Z2−1=(Z+1)(Z−1)Z^2 - 1 = (Z+1)(Z-1) を使うと、

(ar/2−1)(ar/2+1)=ar−1.\bigl(a^{r/2} - 1\bigr) \bigl(a^{r/2} + 1\bigr) = a^r - 1.

さて、位数の定義からar  (mod  N)=1a^r \; (\textrm{mod}\; N) = 1であることがわかっています——これは、NNがar−1a^r - 1を割り切るということの別の言い方です。 これは、NNが次の積を割り切ることを意味します。

(ar/2−1)(ar/2+1).\bigl(a^{r/2} - 1\bigr) \bigl(a^{r/2} + 1\bigr).

これが成り立つためには、NNのすべての素因数がar/2−1a^{r/2} - 1またはar/2+1a^{r/2} + 1(あるいはその両方)の素因数でもなければなりません——そして、aaをランダムに選んだ場合、NNのすべての素因数が一方の項を割り切り、他方をまったく割り切らないということは起こりにくいことがわかっています。 そうでなければ、つまりNNの素因数の一部が最初の項を割り切り、一部が2番目の項を割り切る場合、最初の項とのGCDを計算することでNNの非自明な因数を見つけることができます。