量子コンピューティングでのディラック表記
ディラック表記 は、量子力学における状態と線形代数を表現する正確なニーズに合わせて設計されています。 これは、1930年代に表記を開発した物理学者ポール・ディラックにちなんだ名前です。 ディラック表記は、量子状態と演算を記述するための簡潔で強力な方法です。 量子状態、量子演算、および量子測定を記述するために、量子コンピューティングで使用されます。
この記事では、Dirac 表記について説明し、それを使用して量子の状態と演算を記述する方法について説明します。
列ベクトル表記の制限
列ベクトル表記は線形代数で一般的ですが、量子コンピューティングでは、特に複数の量子ビットを処理する場合によく使用されます。 たとえば、$\psi$ をベクトルとして定義した場合、$\psi$ が行ベクトルなのか列ベクトルなのか明確ではありません。 したがって、$\phi$ と $\psi$ がベクトルの場合、$\phi$ と $\psi$ の形状がコンテキストで不明確な場合があるため、$\phi\psi$ が定義されているかどうかも同様に不明確です。 ベクトルの形状についての曖昧さ以外にも、線形代数表記を使用する単純なベクトルの表現でさえ、煩雑になる可能性があります。 たとえば、各量子ビットが値 $0$ を取る $n$ 量子ビット状態を記述する場合は、状態を正式には次のように表現します
$$\begin{bmatrix}1 \\ 0 \end{bmatrix}\otimes\cdots\otimes\begin{bmatrix}1 \\ 0 \end{bmatrix}. $$
ベクトルは指数関数的に大きくなる空間内にあるため、このようなテンソル積を評価するのは現実的ではありません。 この表記は、実際には、前の表記法を使用して指定できる状態の最適な説明です。
ディラックの記法でのベクトルの種類
ディラックの記法には、bra ベクトルと ket ベクトルという 2 種類のベクトルがあります。このような名前が付けられているのは、それらを一緒にすると "braket (ブラケット)" つまり内積が形成されるためです。 $\psi$ が列ベクトルの場合、ディラックの記法では $\ket{\psi}$ と記述できます。ここで、$\ket{\cdot}$ は、それが ket ベクトルなどの単位列ベクトルであることを示します。 同様に、行ベクトル $\psi^\dagger$ は、$\bra{\psi}$ と表されます。 つまり、$\psi^\dagger$ は、$\psi$ の転置の要素に対して入力方向の複素共役を適用することによって取得されます。 bra-ket 記法は、$\braket{\psi|\psi}$ がベクトル $\psi$ とそれ自体の内積であることを直接意味し、これは定義上 $1$ になります。
一般的には、$\psi$ と $\phi$ が量子状態ベクトルである場合、それらの内積は $\braket{\phi|\psi}$ です。 この内積は、状態 $\ket{\psi}$ の測定が $\ket{\phi}$ になる確率が $|\braket{\phi|\psi}|^2$ であることを意味します。
値 0 と 1 をエンコードする量子状態 (単一量子ビットの計算基底状態) を記述するためには、次の規則が使用されます。
$$\begin{bmatrix} 1 \\ 0 \end{bmatrix}=\ket{{0},\qquad\begin{bmatrix} 0 \\ 1 \end{bmatrix}=\ket{{1}. $$
例: ディラックの記法を使用してアダマール演算を表す
次の表記は、$\ket{0}$ と $\ket{1}$ にアダマール ゲートを適用した結果の状態を示すためによく使用されます。 これらの状態は、ブロッホ球の $+x$ および $-x$ 方向の単位ベクトルに対応します。
$$\frac{1}{\sqrt{{2}}\begin{bmatrix} 1 \\ 1 \end{bmatrix}=H\ket{0}=\ket{+},\qquad\frac{1}{\sqrt{{2}}\begin{bmatrix} 1 \\ -1 \end{bmatrix}=H\ket{{1}=\ket{{-} . $$
これらの状態は、ディラックの記法を使用して、$\ket{0}$ と $\ket{1}$ の合計として拡張することもできます。
$$\ket{+}=\frac{{1}{\sqrt{2}}(\ket{0} + \ket{1}),\qquad\ket{{-}=\frac{{1}{\sqrt{{2}}(\ket{{0} - \ket{1}). $$
計算基底ベクトル
これは、これらの状態がしばしば "計算基底" と呼ばれる理由を示しています。すべての量子状態は常に計算基底ベクトルの合計として表現でき、そのような合計はディラックの記法を使用して簡単に表現できます。 その逆も成り立ち、状態 $\ket{+}$ と $\ket{-}$ も量子状態の基底を形成します。 これは次の事実から確認できます。
$$\ket{{0}=\frac{1}{\sqrt{2}}(\ket{+ } + \ket{-}),\qquad\ket{{1}=\frac{{1}{\sqrt{{2}}(\ket{+} - \ket{-})。 $$
ディラックの記法の例として、braket $\braket{0 | 1}$ を考えます。これは、$0$ と $1$ の間の内積です。 これは次のように記述できます。
$$\braket{0 | 1}=\begin{bmatrix} 1 &0 \end{bmatrix}\begin{bmatrix}0\\ 1\end{bmatrix}=0。 $$
この例では、$\ket{{0}$ と $\ket{{1}$ は直交ベクトルであり、$\braket{0 | 1}=\braket{1 | 0}=0$ を意味します。 また、定義により $\braket{0 | 0}=\braket{1 | 1}=1$ です。これは、2 つの計算基底ベクトルは "正規直交" と呼ぶこともできることを意味します。
これらの正規体プロパティは、次の例で使用します。 $\ket{\psi}={\frac{3}{5}}\ket{{1} + {\frac{{4}{5}}\ket{0}$ という状態がある場合、$\braket{1 | 0}=0$ であるため、測定が $1$ になる確率は次のようになります
$$\big|\braket{1 |\psi}\big|^2=\left|\frac{{3}{5}\braket{1 | 1} +\frac{{4}{5}\braket{1 | 0}\right|^2=\frac{{9}{{25}. $$
テンソル積の表記
ディラック表記には、暗黙的な tensor product 構造体も含まれます。 量子コンピューティングでは、2 つの非相関量子レジスタによって記述された状態ベクトルは 2 つの状態ベクトルのテンソル積であるため、この構造は重要です。 量子計算について説明する場合、テンソル積構造またはその欠如の簡潔な記述は重要です。 テンソル積構造は、任意の 2 つの量子状態ベクトル $\phi$ と $\psi$ に対する $\psi\otimes\phi$ を $\ket{\psi}\otimes\ket{\phi}$ と記述できることを意味します。 ただし、慣例として、ベクトルの間に $\otimes$ を記述する必要はないため、$\ket{\psi}\ket{\phi}=\ket{\psi\phi}$ と記述できます。 ベクトルとテンソル積の詳細については、量子コンピューティングにおけるベクトルと行列に関する記事を参照してください。 たとえば、2 つの量子ビットがゼロ状態に初期化された状態は次のようになります。
$$\ket{0}\otimes\ket{0}=\ket{{0}\ket{{0}=\ket{{00}=\begin{bmatrix} 1 \\ 0 \end{bmatrix}\otimes\begin{bmatrix} 1 \\ 0 \end{bmatrix}=\begin{bmatrix} 1 \\ 0 \\ 0 \\ 0 \end{bmatrix}. $$
同様に、整数 $p$ に対する状態 $\ket{p}$ は、整数 $p$ をバイナリ表現でエンコードする量子状態を表します。 たとえば、符号なしのバイナリ エンコードを使用して数 $5$ を表現する場合は、次のように表現することもできます
$$\ket{1}\ket{0}\ket{1}=\ket{101}=\ket{5}. $$
この記法では、$\ket{0}$ は、1 量子ビットの状態を参照する必要はなく、$0$ のバイナリ エンコードが格納されている "量子ビット レジスタ" を参照できます。 これら 2 つの表記の違いは、コンテキストから明らかです。 この規則は、次のいずれかの方法で記述できる最初の例を簡略化するのに役立ちます。
$$\begin{bmatrix}1 \\ 0 \end{bmatrix}\otimes\cdots\otimes\begin{bmatrix}1 \\ 0 \end{bmatrix}=\ket{{0}\otimes\cdots\otimes\ket{0}=|0\cdots 0\rangle=\ket{{0}^{\otimes n}$$
ここで、$\ket{0}^{\otimes n}$ は、$n$$\ket{0}$ の量子状態のテンソル積を表します。
例: ディラックの記法で重ね合わせを記述する
Dirac 表記を使用して量子状態を記述する方法のもう 1 つの例として、長さ $n のすべての可能なビット文字列に対して等しい仮定である量子状態を書き込む次の同等の方法を検討してください。$
$$ H^{\otimes n}\ket{0}=\frac{1}{2^{n/2}}\sum_{j=0}^{2^n-1}\ket{j}=\ket{+}^{\otimes n}. $$
ここでは、$n$ ビットについて $0$ から $2^{n}-1$ まで合計するのはなぜか、不思議に思うかもしれません。 まず、$n$ ビットによって表現できる異なる構成が $2^{n}$ 個であることに注意してください。 これは、1 ビットでは $2$ つの値を表現でき、2 ビットでは $4$ つの値を表現できることに注意すればわかるはずです。 一般に、これは可能性のある異なるビット文字列は $2^n$ 個ですが、それらのいずれかでエンコードされる最大値は $1\cdots 1=2^n-1$ であるため、それが合計の上限になることを意味します。 ちなみに、この例では、$\ket{{0}^{\otimes n}=\ket{{0}$ に似ている $\ket{+}^{\otimes n}=\ket{+}$ は使用しませんでした。 この表記規則は、すべての量子ビットがゼロに初期化された計算基準の状態用に予約されています。 この場合、このような規則は賢明ですが、量子コンピューティングの文献では採用されていません。
ディラックの記法を使用して線形性を表現する
ディラックの記法のもう 1 つの特徴は、それが線形であるということです。 たとえば、2 つの複素数 $\alpha$ と $\beta$ について、次のように記述できます
$$\ket{\psi}\otimes ( \alpha\ket{\phi} + \beta\ket{\chi})=\alpha\ket{\psi}\ket{\phi} + \beta\ket{\psi}\ket{\chi}.$$
つまり、状態ベクトルの間でのテンソル積の計算が通常の乗算と同じに見えるように、ディラックの記法にテンソル積の表記を分散させることができます。
bra ベクトルは、ket ベクトルと同様の規則に従います。 たとえば、ベクトル $\bra{\psi}\bra{\phi}$ は、状態ベクトル $\psi^\dagger\otimes\phi^\dagger=(\psi\otimes\phi)^\dagger$ と同等です。 ket ベクトル $\ket{\psi}$ が $\alpha\ket{0} + \beta\ket{1}$ である場合、ベクトルの bra ベクトル バージョンは $\bra{\psi}=\ket{\psi}^\dagger= (\bra{{0}\alpha^* +\bra{1}\beta^*)$ となります。
たとえば、状態 $\ket{\psi}=\frac{3}{5}\ket{{1} + \frac{4}{5}\ket{0}$ の測定の確率を、状態を $\ket{+}$ または $\ket{{-}$ として測定する量子プログラムを使用して計算したいとします。 この場合、状態は $\ket{-}$ であるとデバイスが出力する確率は、次のようになります
$$|\braket{- |\psi}|^2=\left|\frac{{1}{\sqrt{{2}}(\bra{0} - \bra{{1})(\frac{3}{5}\ket{{1} + \frac{{4}{5}\ket{0}) \right|^2=\left|-\frac{3}{5\sqrt{{2}} + \frac{{4}{5\sqrt{2}}\right|^2=\frac{{1}{{50}.$$
確率の計算にマイナスの符号が出現するのは量子干渉の結果であり、これは古典的コンピューティングより量子コンピューティングが優れているメカニズムの 1 つです。
ketbra または外積
ディラックの記法に関して説明する最後の項目は、ketbra または外積です。 外側の製品は、ディラック表記内で $\ket{\psi}\bra{\phi}$として表され、ブラとケッツがブレーキと逆の順序で発生するため、ケトブラと呼ばれることもあります。 量子状態ベクトル $\psi$ と $\phi$ の外積は、行列乗算では $\ket{\psi}\bra{\phi}=\psi\phi^\dagger$ と定義されます。 この表記の最も単純で、おそらく最も一般的な例は、次にようなものです。
$$\ket{0}\bra{{0}=\begin{bmatrix}1\\ 0 \end{bmatrix}\begin{bmatrix}1&0 \end{bmatrix}=\begin{bmatrix}1 &0\\ 0 &0\end{bmatrix}\qquad\ket{1}\bra{1}=\begin{bmatrix}0\\ 1 \end{bmatrix}\begin{bmatrix}0&1 \end{bmatrix}=\begin{bmatrix}0 &0\\ 0 &1\end{bmatrix}。 $$
ketbra は、量子状態を固定値に射影するため、プロジェクターと呼ばれることがよくあります。 これらの演算は単位的ではないため (ベクトルのノルムさえ維持されません)、量子コンピューターでプロジェクターを決定論的に適用できません。 しかし、測定による量子状態へのアクションの記述では、プロジェクターは素晴らしい仕事をします。 たとえば、状態 $\ket{\psi}$ が $0$ と測定される場合、測定の結果として状態で行われる変換は次のようになります
$$\ket{\psi}\rightarrow \frac{(\ket{{0}\bra{{0})\ket{\psi}}{|\braket{0 |\psi}|}=\ket{{0},$$
あなたは状態を測定し、それが $\ket{0}$であることが判明した場合は予想通り。 繰り返しますが、このようなプロジェクターを量子コンピューターの状態に決定論的に適用することはできません。 代わりに、せいぜい、何らかの固定の確率で結果 $\ket{0}$ を示すようにランダムに適用できるだけです。 このような測定成功の確率は、その状態における量子プロジェクターの期待値として記述できます
$$\bra{\psi} (\ket{0}\bra{0})\ket{\psi}=|\braket{\psi| 0}|^2, $$
これは、測定プロセスを表現する新しい方法がプロジェクターによって提供されることを示しています。
代わりに、複数量子ビット状態の最初の量子ビットを $1$ として測定する場合は、プロジェクターとディラックの記法を使用して、このプロセスを次のように簡単に記述することもできます。
$$ P(\text{最初の量子ビット = 1})=\bra{\psi}\left(\ket{{1}\bra{{1}\otimes \mathbf{\mathbf{1}^{\otimes n-1}\right) \ket{\psi}。 $$
ここで、ID 行列はディラックの記法で簡単に次のように記述できます。
$$\mathbb{I}=\ket{{0}\bra{0}+\ket{{1}\bra{1}=\begin{bmatrix}1&0\\ 0&1 \end{bmatrix}。 $$
2 量子ビットの場合は、次のようにプロジェクターを拡張できます。
$$\ket{1}\bra{1}\otimes\mathbb{I}=\ket{{1}\bra{1}\otimes (\ket{0}\bra{0}+ \ket{1}\bra{{1})=\ket{10}\bra{{10} + \ket{{11}\bra{{11}。 $$
これは、列ベクトル表記を使用する複数量子ビットの確率の測定値についての説明と一致します。
$$ P(\text{first qubit = 1})=\psi^\dagger (e_{10}e_{10}^\dagger + e_{{11}e_{{11}^\dagger)\psi=|e_{{10}^\dagger\psi|^2 + |e_{11}^\dagger\psi|^2, $$
これは、複数量子ビットの測定に関する議論と一致します。 ただし、この結果を複数量子ビットのケースに一般化することは、列ベクトル表記よりディラックの記法を使用する方が少し簡単であり、前の処理とまったく同じです。
密度演算子
ディラックの記法を使用して表すもう 1 つの便利な演算子は、"密度演算子" です。これは、"状態演算子" とも呼ばれます。 量子状態ベクトルとして、密度演算子はシステムの量子状態を表します。 量子状態ベクトルは pure 状態のみを表すことができますが密度演算子は 混在状態を表すこともできます。
一般的に、次の条件が満たされた場合、特定のマトリックス $\rho$ は有効な密度演算子です。
- $\rho$ は、複素数の行列です。
- $\rho = \rho^{\dagger}$ (つまり、$\rho$ はエルミートです)
- $\rho$のすべての固有値$p$は負ではない
- $\rho$ のすべての固有値の合計は 1 になります
これらの条件によって、$\rho$ が固有値として見なされることが保証されます。 量子状態ベクトル $\ket{\psi}$ の密度演算子は、$\rho =\sum_i p_i \ket{\psi_i}\bra{\psi_i}$ の形式を取り、$\rho$ の固有値分解です。$\rho$ は、アンサンブル $\rho ={\ket{\psi_i}\text{with probability} p_i }$ を記述します。
純粋な量子状態は、1 つの ket ベクトルまたは波動関数によって特徴付けられたものであり、他の量子状態の統計的混合状態 (または "凸結合") として記述することはできません。 混合量子状態は、純粋な状態の統計集合です。
ブロッホ球では、純粋な状態は球の表面上の点で表され、混合状態は内部点で表されます。 1 つの量子ビットの混合状態は、球の中心によって対称性によって表されます。 状態の純度は、球の表面に近い度合いとして視覚化できます。
状態をベクトルではなく行列として表すというこの概念は、確率計算を表す便利な方法を提供し、同じ形式内で統計的な不確実性と量子の不確実性の両方を記述できるため、しばしば便利です。
密度演算子 $\rho$ は、次の場合にのみ、純粋な状態を表します。
- $\rho$ は、状態ベクトルの外積 $\rho=\ket{\psi}\bra{\psi}$ として記述できます。
- $\rho =\rho^2$
- $tr(\rho^2)=1$
指定された密度演算子 $\rho$ が純粋にどれだけ近いかを確認するために、$\rho^2$ のトレース (対角線要素の合計) を見ることができます。 密度演算子は、$tr(\rho ^{2})=1$ の場合に限り、純粋な状態を表します。
量子状態に相当する Q# ゲート シーケンス
量子表記と Q# プログラミング言語についての最後のポイント: このドキュメントの冒頭で、量子状態は量子コンピューティングにおける情報の基本的なオブジェクトであることを説明しました。 Q# には量子状態の概念がないということに驚かれるかもしれません。 代わりに、すべての状態は、それらを準備するために使用される操作によってのみ記述されます。 前の例は、このことをよく示しています。 レジスタ内のすべての量子ビット文字列に対して均一の重ね合わせを表現するのではなく、結果を $H^{\otimes n}\ket{0}$ として表すことができます。 この指数関数的に短い状態の記述は、従来からそれについて考えられていた利点があるだけでなく、アルゴリズムを実装するためにソフトウェア スタックを通じて伝達される必要がある操作を簡潔に定義することもできます。 このため、Q# は、量子状態ではなくゲート シーケンスを生成するように設計されています。ただし、理論レベルでは 2 つのパースペクティブは同等のものです。