複数の量子ビットに対する操作

この記事では、1 量子ビット状態から複数量子ビット状態を構築するために使用される規則を確認し、多量子ビットのユニバーサル量子コンピューターを形成するためにゲート セットに含む必要があるゲート操作について説明します。 これらのツールは、コードで一般的に使用されるゲート セット Q# 理解するために必要です。 また、エンタングルメントや干渉などの量子効果によって、量子コンピューティングが従来のコンピューティングよりも強力である理由について直感を得ることも重要です。

単一量子ビットゲートとマルチ量子ビット ゲート

量子コンピューティングの真のパワーは、量子ビットの数を増やすと明らかになります。 1 つの量子ビットには、特定の時点で複数の状態になる機能など、いくつかのカウンター直感的な機能があります。 ただし、量子コンピューターに含まれるのが単一量子ビット ゲートの場合、電卓と古典的なスーパーコンピューターは計算能力を小さくします。

量子コンピューティングでは、1 つの理由として、量子状態ベクトルのベクトル空間の次元が量子ビットの数と共に指数関数的に増大するため、計算能力が向上します。 つまり、1 個の量子ビットは簡単にモデル化できますが、50 量子ビットの量子計算をシミュレートすると、おそらく既存のスーパーコンピューターの限界を超えます。 計算のサイズを 1 つの余分な量子ビットだけ増やすと状態の格納に必要なメモリが 1 つ増え計算時間ほぼです。 一部の計算タスクにおいて、比較的少数の量子ビットを使用する量子コンピューターが、今日、明日、そして将来の最も強力なスーパーコンピューターをはるかに超えることができるのは、この急速な計算能力の倍増によるものです。

2 量子ビット状態

状態 $\psi=\begin{bmatrix}\alpha\\\beta\end{bmatrix}$ の 2 つの量子ビットがあり、もう 1 つは状態 $\phi=\begin{bmatrix}\gamma\\\delta\end{bmatrix}$にある場合、対応する 2 量子ビットの状態は、ベクトルのテンソル積 (または Kronecker product) によって与えられます。これは次のように定義されます。

$$\psi\otimes\phi=\begin{bmatrix}\alpha\\\beta\end{bmatrix}\otimes\begin{bmatrix}\gamma\\\delta\end{bmatrix}=\begin{bmatrix}\alpha\begin{bmatrix}\gamma\\\delta\end{bmatrix}\\\beta\begin{bmatrix}\gamma\\\delta\end{bmatrix}\end{bmatrix}=\begin{bmatrix}\alpha\gamma\\\alpha\delta\\\beta\gamma\\\beta\delta\end{bmatrix}. $$

したがって、 $\psi$ と $\phi$の 2 つの単一量子ビット状態が与えられると、次元 2 のそれぞれで、対応する 2 量子ビット状態 $\psi\otimes\phi$ は 4 次元になります。 ベクトル

$$\begin{bmatrix}\alpha_{{00}\\\alpha_{{01}\\\alpha_{{10}\\\alpha_{{11}\end{bmatrix}$$

は、次の場合に 2 つの量子ビットの量子状態を表します。

$$|\alpha_{00}|^2+|\alpha_{01}|^2+|\alpha_{{10}|^2+|\alpha_{{11}|^2=1.$$

より一般的には、$n$ 個の量子ビットは、この構成を使用して次元 $2 \cdot 2 \cdot 2 \cdots= 2^n$ の単位ベクトル $v_1 \otimes v_2 \otimes\cdots\otimes v_n$ で表されることがわかります。 1 量子ビットと同様、複数量子ビットの量子状態ベクトルには、システムの動作を説明するために必要なすべての情報が保持されます。 ベクトルとテンソル積の詳細については、量子コンピューティングにおけるベクトルと行列に関する記事を参照してください。

2 量子ビット状態の計算基準は、1 量子ビット基底状態のテンソル積によって形成されます。 たとえば、次のようになります。

$$\begin{\begin{align}00 \equiv\begin{bmatrix}1 \\ 0 \end{bmatrix}\otimes\begin{bmatrix}1 \\ 0 \end{bmatrix}&=\begin{bmatrix}1 \\ 0\\ 0\\ 0 \end{bmatrix},\qquad 01 \equiv\begin{bmatrix}1 \\ 0 \end{bmatrix}\otimes\begin{bmatrix}0 \\ 1 \end{bmatrix}=\begin{bmatrix}0 \\ 1\\ 0\\ 0 \end{bmatrix},\\ 10 \equiv\begin{bmatrix}0 \\ 1 \end{bmatrix}\otimes\begin{bmatrix}1 \\ 0 \end{bmatrix}&=\begin{bmatrix}0 \\ 0\\\\ 0 \end{bmatrix},\qquad 11 \equiv\begin{bmatrix}0 \\ 1 \end{bmatrix}\otimes\begin{bmatrix}0 \\ 1 \end{bmatrix}=\begin{bmatrix}0 \\ 0\\ 0\\ 1 \end{bmatrix}。 \end{align} $$

2 つの単一量子ビット状態のテンソル積を常に使用して 2 量子ビット状態を形成できますが、すべての 2 量子ビット量子状態を 2 つの単一量子ビット状態のテンソル積として書き込むことができるわけではないことに注意してください。 たとえば、テンソル積が次の状態であるような状態 $\psi=\begin{bmatrix}\alpha\\\beta\end{bmatrix}$ や $\phi=\begin{bmatrix}\gamma\\\delta\end{bmatrix}$ はありません。

$$\psi\otimes\phi=\begin{bmatrix} 1/\sqrt{{2}\\ 0 \\ 0 \\ 1/\sqrt{{2}\end{bmatrix}$$

1 量子ビット状態のテンソル積として記述できないこのような 2 量子ビット状態は "もつれた状態" と呼ばれており、2 個の量子ビットを "もつれている" と言います。 大まかに言えば、量子状態は 1 量子ビット状態のテンソル積とは考えられないため、状態が保持する情報は、どちらの量子ビットにも個々に限定されません。 むしろ、情報は 2 つの状態間の相関関係に非局所的に格納されます。 この情報の非局所性は、従来のコンピューティングよりも量子コンピューティングの主要な特徴の 1 つであり、量子エラー修正を含む多くの量子プロトコルに不可欠です。

2 量子ビット状態の測定

2 量子ビット状態の測定は、1 量子ビットの測定と非常に似ています。 状態の測定

$$\begin{bmatrix}\alpha_{{00}\\\alpha_{{01}\\\alpha_{{10}\\\alpha_{{11}\end{bmatrix}$$

は、$|\alpha_{{00}|^2$ の確率で $00$、$|\alpha_{01}|^2$ の確率で $01$、$|\alpha_{{10}|^2$ の確率で $10$、$|\alpha_{11}|^2$ の確率で $11$ となります。 変数 $\alpha_{00}、\alpha_{{01}、\alpha_{{10}、$および $\alpha_{11}$ は、この関係を明確にするために意図的な名前が付けられています。 測定後、結果が $00の場合$2量子ビットシステムの量子状態が折りたたまれており、現在は

$$ 00 \equiv\begin{bmatrix} 1 \\ 0 \\ 0 \\ 0 \end{bmatrix} $$

また、2 量子ビット量子状態の量子ビットを 1 つだけ測定することもできます。 2 量子ビット状態の量子ビットを 1 つだけ測定する場合、測定の影響は 2 つの量子ビットの測定とは微妙に異なります。 これは、状態全体が計算基準状態に折りたたまれていないためであり、1 つのサブシステムにのみ折りたたまれるためです。 つまり、2 量子ビット状態の 1 つの量子ビットを測定すると、関連するサブシステムが計算基準状態に折りたたまれるだけです。

これを確認するには、最初に&クォートに設定された 2 つの量子ビットに Hadmard 変換 $H$ を適用することによって形成される、次の状態の最初の量子ビットを測定することを検討してください。0&引用符; 状態:

$$H^{\otimes 2}\left( \begin{bmatrix}1 \\ 0 \end{bmatrix}\otimes\begin{bmatrix}1 \\ 0 \end{bmatrix}\right) =\frac{{1}{2}\begin{bmatrix}1 & 1 & 1 & 1 \\ 1 & -1 & 1 & -1 \\ 1 & 1 & -1 & -1 \\ 1 & -1 & -1 & 1 \end{bmatrix}\begin{bmatrix}1\\ 0\\ 0\\ 0\end{bmatrix}=\frac{{1}{2}\begin{bmatrix}1\\ 1\\ 1\\\end{bmatrix}\mapsto\begin{cases}\text{ }=0 & \frac{{1}{\sqrt{2}}\begin{bmatrix}1\\ 1\\ 0\\ 0 \end{bmatrix}\\\text{出力}=1 & \frac{{1}{\sqrt{{2}}\begin{bmatrix}0\\ 0\\ 1\\ 1 \end{bmatrix}\\\end{cases}。 $$ どちらの結果も 50% の確率で発生します。 これは、 $0$ が最初の量子ビットで $1$ とスワップされた場合、測定前の量子状態が変化しないという事実から考えることができます。

1 番目または 2 番目の量子ビットを測定するための数学的な規則は単純です。 計算基準ベクトルと$S}$$k^{\rm 番目$e_k$$問題の量子ビットが$k$の値$1$を受け取るすべての$e_k$のセットとします。 たとえば、最初の量子ビットの測定に関心がある場合、 $S$ は $e_1\equiv 10$ $e_3\equiv 11 で構成$。 同様に、2 番目の量子ビット $S に関心がある場合は$ $e_2\equiv 01 と $e_3 \equiv 11 で構成$$。 その後、選択されたキュービットが $1$ であると測定される確率は、状態ベクトル $\psi$ の場合、次のようになります。

$$ P(\text{outcome}=1)=\sum_{e_k \text{ in the set } S}\psi^\dagger e_k e_k^\dagger\psi $$

Note

この記事では、 little-endian 形式を使用して計算基準にラベルを付けます。 リトルエンディアン形式では、最下位ビットが先頭になります。 たとえば、リトルエンディアン形式の数値 4 は、ビット 001 の文字列で表されます。

各量子ビットの測定では $0$ または $1$ しか得られないため、$0$ を測定する確率は、単純に $1-P(\text{outcome}=1)$ になります。 このため、 $1$を測定する確率の数式のみが必要です。

このような測定が状態に及ぼす作用は、数学的には次のように表すことができます。

$$\psi\mapsto\frac{\sum_{e_k \text{ in the set } S} e_k e_k^\dagger\psi}{\sqrt{P(\text{outcome}=1)}} $$

注意深い読者は、分母がゼロの場合に何が起こるかを心配する可能性があります。 このような状態は未定義ですが、確率が 0 であるため、このような結果について心配する必要はありません。

上記の均一な状態ベクトル $\psi$ 受け取り、最初の量子ビットの測定に関心がある場合は、

$$ P(\text{measurement of first qubit}=1) = (\psi^\dagger e_1)(e_1^\dagger\psi)+(\psi^\dagger e_3)(e_3^\dagger\psi)=|e_1^\dagger\psi|^2+|e_3^\dagger\psi|^2 $$

これは、 $10$ と $11$の結果を測定するために予想される 2 つの確率の合計であることに注意してください。 この例の場合、これは、次の式になります。

$$\frac{{1}{4}\left|\begin{bmatrix}0&0&1&0\end{bmatrix}\begin{bmatrix}1\\ 1\\ 1\\\end{bmatrix}\right|^2+\frac{1}{{4}\left|\begin{bmatrix}0&0&0&1\end{bmatrix}\begin{bmatrix}1\\ 1\\ 1\\ 1\end{bmatrix}\right|^2=\frac{{1}{{2}。 $$

私たちの直感に完全に一致します。 同様に、最初の量子ビットの後の状態は、 $1 として測定$ 次のように書き込むことができます。

$$\frac{\frac{e_1}{2}+\frac{e_3}{2}}{\sqrt{\frac{1}{2}}}=\frac{1}{\sqrt{2}}\begin{bmatrix} 0\\ 0\\ 1\\ 1\end{bmatrix}$$

この場合も、私たちの直感どおりです。

2 量子ビット操作

1 量子ビットの場合と同様、ユニタリ変換は量子ビットに対する有効な操作です。 通常、$n$ 個の量子ビットに対するユニタリ変換は、$U^{-1}= U^\dagger$ のようなサイズが $2^n \times 2^n$ の行列 $U$ です (したがって、サイズが $2^n$ のベクトルで動作します)。 たとえば、CNOT (制御 NOT) ゲートは、一般的に使用される 2 量子ビット ゲートであり、次のユニタリ行列で表されます。

$$\operatorname{CNOT}=\begin{bmatrix} 1\ 0\ 0\ 0 \\ 0\ 1\ 0\ 0 \\ 0\ 0\ 0\ 1 \\ 0\ 0\ 1\ 0 \end{bmatrix}$$

両方の量子ビットに 1 量子ビット ゲートを適用することにより、2 量子ビット ゲートを形成することもできます。 たとえば、ゲートを適用する場合

$$\begin{bmatrix} a\ b\\ c\ d \end{bmatrix}$$

and

$$\begin{bmatrix} e\ f\\ g\ h \end{bmatrix}$$

1 番目と 2 番目の量子ビットに、 これは、それぞれ、テンソル積によって与えられる 2 量子ビットユニタリ ( $$\begin{bmatrix} a\ b\\ c\ d \end{bmatrix}\otimes\begin{bmatrix} e\ f\\ g\ h \end{bmatrix}=\begin{bmatrix} ae\ af\ be\ bf \\ ag\ ah\ bg\ bg\ bh \\ ce\ cf\ de\ df \\ cg\ ch\ dg\ dh \end{bmatrix}を適用することと同じです。$$

したがって、既知の単一量子ビット ゲートのテンソル積を取ることで、2 量子ビット ゲートを形成できます。 2 量子ビット ゲートの例としては、 $H \otimes H$、 $X \otimes\mathbf{1}$、 $X \otimes Z などがあります$。

2 個の 1 量子ビット ゲートはテンソル積を使用することによって 2 量子ビット ゲートを定義しますが、その逆は真ではないことに注意してください。 すべての 2 量子ビット ゲートが 1 量子ビット ゲートのテンソル積として記述できるわけではありません。 このようなゲートは、"エンタングリング" ゲートと呼ばれています。 エンタングリング ゲートの一例としては、CNOT ゲートが挙げられます。

制御されていないゲートの背後にある直感は、任意のゲートに汎用化できます。 一般に、制御されたゲートは、特定の量子ビットが $1$でない限り、ID として機能するゲートです。 ここでは、$\Lambda_x(U)$を使用して、$x$というラベルの付いた量子ビットで制御される制御ユニタリを示します。 例を挙げると、$\Lambda_0(U) e_{{1}\otimes{\psi}=e_{1}\otimes U{\psi}$ および $\Lambda_0(U) e_{{0}\otimes{\psi}=e_{{0}\otimes{\psi}$ になります。ここで、$e_0$ および $e_1$ は、値 $0$ および $1$ に対応する 1 つの量子ビットの計算基底ベクトルです。 たとえば、次の制御された$Z$gate を次のように表現できます。

$$\Lambda_0(Z)=\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&1&0\\0&0&0&-1 \end{bmatrix}=(\mathbf{\mathbf{1}\otimes H)\operatorname{CNOT}(\mathbf{1}\otimes H)。 $$

効率的な方法で制御ユニタリを構築することは大きな課題です。 これを最も簡単に実装するには、基本ゲートの制御バージョンのデータベースを形成し、元のユニタリ演算のすべての基本ゲートを、その対応する制御ゲートに置き換える必要があります。 多くの場合、これは非常に無駄であり、巧妙な洞察を使用していくつかのゲートを制御されたバージョンに置き換えるだけで、同じ影響を実現できる場合が少なくありません。 このため、フレームワークは、単純な制御方法を実行するか、最適化された手動チューニングバージョンがわかっている場合に、ユーザーがユニタリの制御されたバージョンを定義できるようにする機能を提供します。

ゲートは、古典的な情報を使用して制御することもできます。 たとえば、古典的制御 NOT ゲートは通常の NOT ゲートにすぎませんが、量子ビットとは対照的に、古典ビットが $1$ である場合のみ適用されます。 この意味で、古典的制御ゲートは、ゲートがコードの 1 つの分岐にのみ適用される量子コード内の if ステートメントと考えることができます。

1 量子ビットの場合と同様に、2 量子ビット ゲート セットは、任意の $4\times 4$ のユニタリ行列がこのセットのゲートの積によって任意の精度に近似できる場合、ユニバーサルです。 ユニバーサル ゲート セットの例としては、アダマール ゲート、T ゲート、CNOT ゲートがあります。 これらのゲートの積を取ることで、2 つの量子ビットで任意のユニタリ 行列を近似できます。

多量子ビット システム

2 量子ビットの場合に調べたパターンとまったく同じパターンに従って、より小さなシステムから多量子ビットの量子状態を構築します。 このような状態は、より小さな状態のテンソル積を形成することによって構築されます。 たとえば、量子コンピューターでビット文字列 $1011001$ をエンコードする場合について考えてみましょう。 これを次のようにエンコードできます。

$$ 1011001 \equiv\begin{bmatrix} 0 \\ 1 \end{bmatrix}\otimes\begin{bmatrix} 1 \\ 0 \end{bmatrix}\otimes\begin{bmatrix} 0 \\ 1 \end{bmatrix}\otimes\begin{bmatrix} 0 \\ 1 \end{bmatrix}\otimes\begin{bmatrix} 1 \\ 0 \end{bmatrix}\otimes\begin{bmatrix} 1 \\ 0 \end{bmatrix}\otimes\begin{bmatrix} 0 \\ 1 \end{bmatrix}. $$

量子ゲートはまったく同じように機能します。 たとえば、 $X$ ゲートを最初の量子ビットに適用し、2 番目と 3 番目の量子ビットの間で CNOT を実行する場合、この変換は次のように表現できます。

\begin{\begin{align}&アンプ;(X \otimes\operatorname{CNOT}_{{12}\otimes\mathbf{1}\otimes \mathbf{\mathbf{1}\otimes \mathbf{\mathbf{1}\otimes \mathbf{\mathbf{1}) \begin{bmatrix} 0 \\ 1 \end{bmatrix}\otimes\begin{bmatrix} 1 \\ 0 \end{bmatrix}\otimes\begin{bmatrix} 0 \\ 1 \end{bmatrix}\otimes\begin{bmatrix} 0 \\ 1 \end{bmatrix}\otimes\begin{bmatrix} 1 \\ 0 \end{bmatrix}\otimes\begin{bmatrix} 1 \\ 0 \end{bmatrix}\otimes\begin{bmatrix} 0 \\ 1 \end{bmatrix}\\&\qquad\qquad\equiv 0011001. \end{align}

多くの量子ビット システムでは、量子コンピューターの一時メモリとして機能する量子ビットを割り当てたり、割り当てを解除したりする必要がある場合が少なくありません。 このような量子ビットは、補助といいます。 既定では、量子ビットの状態が割り当て時に $e_0$ するように初期化されていると想定できます。 さらに、割り当てを解除する前に $e_0$ に再び返されると仮定できます。 補助量子ビットが、割り当て解除されたときに別の量子ビット レジスタともつれると、割り当て解除のプロセスによって補助量子ビットが破損するため、この前提は重要です。 このため、このような量子ビットはリリースされる前に初期状態に戻されると常に想定します。

最後に、2 量子ビットの量子コンピューターのユニバーサル量子コンピューティングを実現するには、新しいゲートをゲート セットに追加する必要がありましたが、複数量子ビットの場合は新しいゲートを導入する必要はありません。 一般的なユニタリ変換は、一連の 2 量子ビット回転に分割できるため、ゲート $H$, $T$ と CNOT は、多量子ビットでユニバーサル ゲート セットを形成します。 その後、2 量子ビット ケース用に開発された理論を活用し、多くの量子ビットがある場合はここでもう一度使用できます。

Note

これまで使用されてきた線形代数表記は、確かにマルチ量子ビット状態を記述するために使用できますが、状態のサイズを大きくすると、ますます煩雑になります。 たとえば、長さが 7 ビットの文字列から得られる列ベクトルは、$128$ 次元であるため、前述の表記法を使用してこれを表現するのは非常に面倒です。 代わりに、 Dirac 表記、量子状態の表現を簡略化する記号の短縮形が使用されます。 詳細については、「 Dirac 表記を参照してください。