らんだむな記憶

blogというものを体験してみようか!的なー

量子コンピューティング (5)

よく CNOT ゲートのことを

\begin{align*}
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 0 & 1 \\
0 & 0 & 1 & 0
\end{pmatrix}
\end{align*}

と書くけど、量子回路図だと、2 量子ビットを入力するので、正直この 4x4 行列を、いつ、何に作用させるのかよく分かっていなかった。が、

\begin{align*}
(U\ket{\psi}) \otimes (V \ket{\phi}) = (U \otimes V)(\ket{\psi} \otimes \ket{\phi})
\tag{1}
\end{align*}

のことだと気づいた。つまりこの式で言うと

\begin{align*}
\text{``$U \otimes V$''} = \begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 0 & 1 \\
0 & 0 & 1 & 0
\end{pmatrix}
\end{align*}

の部分ということになる。制御量子ビットに作用しているやつが $U$ ということになるだろうか。
実際にはこう単純ではなく、$\mathrm{CNOT} = \ket{0}\bra{0} \otimes I + \ket{1}\bra{1} \otimes X$ と書かれる。一旦これを Kronecker 積で直接計算してみる:

\begin{align*}
\ket{0}\bra{0} \otimes I + \ket{1}\bra{1} \otimes X &= \begin{pmatrix}
1 & 0 \\
0 & 0
\end{pmatrix} \otimes I + \begin{pmatrix}
0 & 0 \\
0 & 1
\end{pmatrix} \otimes X \\
&= \begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0
\end{pmatrix} + \begin{pmatrix}
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 1 \\
0 & 0 & 1 & 0
\end{pmatrix} \\
&= \begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 0 & 1 \\
0 & 0 & 1 & 0
\end{pmatrix}
\end{align*}

で確かに CNOT の行列になっている。“左辺” については

\begin{align*}
\mathrm{CNOT}\ket{\psi} \otimes \ket{\phi} &= \ket{0}\braket{0 | \psi} \otimes \ket{\phi} + \ket{1}\braket{1 | \psi} \otimes X \ket{\phi} \\
& = \braket{0 | \psi} (\ket{0} \otimes \ket{\phi}) + \braket{1 | \psi} (\ket{1} \otimes X \ket{\phi})
\end{align*}

なので、$\ket{\psi} = \ket{0}$ の時は $\ket{0} \otimes \ket{\phi} = \ket{\psi} \otimes \ket{\phi}$ が得られ、$\ket{\psi} = \ket{1}$ の時は $\ket{1} \otimes X\ket{\phi} = \ket{\psi} \otimes X\ket{\phi}$ が得られることが分かる。

ということで、量子回路図は量子ビットテンソル積へのゲートの作用の仕方を図示したもの((1) 式で言うと左辺)で、ゲートを行列表示した場合には、量子ビットテンソル積を具体的に計算して得られる複素ベクトルへの作用((1) 式で言うと右辺)ということになる。