らんだむな記憶

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

Qiskit (10)

複数量子ビットともつれ状態 を読んでいき、unitary_simulator のところまで来た。

qc = QuantumCircuit(2)
qc.h(0)
qc.x(1)
qc.draw('mpl')

は次のような回路で表される。

f:id:derwind:20220117023145p:plain

これについて

backend = Aer.get_backend('unitary_simulator')
unitary = execute(qc,backend).result().get_unitary()
print(np.round(unitary, 4))

を実行すると

[[ 0.    +0.j  0.    +0.j  0.7071+0.j  0.7071-0.j]
 [-0.    +0.j -0.    +0.j  0.7071+0.j -0.7071+0.j]
 [ 0.7071+0.j  0.7071-0.j  0.    +0.j  0.    +0.j]
 [ 0.7071+0.j -0.7071+0.j -0.    +0.j -0.    +0.j]]

を得る。要するに、

\begin{align*}
\begin{pmatrix}
0 & 0 & \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\
0 & 0 & \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\
\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} & 0 & 0 \\
\frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} & 0 & 0
\end{pmatrix} = \begin{pmatrix}
0 & H \\
H & 0
\end{pmatrix} = X \otimes H
\end{align*}

が得られたということである。$(H \ket{\psi}) \otimes (X \ket{\phi}) = (H \otimes X)(\ket{\psi} \otimes \ket{\phi})$ ということで、状態ベクトル $\ket{\psi} \otimes \ket{\phi}$ に作用する 4x4 の行列部分を unitary_simulator を使えば得られるということになる。

これを踏まえると書籍 p.70 のサンプルはいきなり難しいなと感じる。

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

を $\ket{\psi}$, $\ket{\phi}$ に 0, 1 を与える計算すると状態ベクトル $\ket{\psi} \otimes \ket{\phi}$ に作用する行列は

\begin{align*}
\begin{pmatrix}
\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} & 0 & 0 \\
0 & 0 & \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\
0 & 0 & \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\
\frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} & 0 & 0
\end{pmatrix}
\end{align*}

であるという結果が得られていることになる。確かに $\ket{\psi} = \ket{0}$, $\ket{\phi} = \ket{0}$ の時は、このユニタリ行列の第 1 列に対応する状態ベクトル $(1/\sqrt{2},0,0,1/\sqrt{2})^T$ が得られることになるが、それは Bell 状態 $\frac{1}{\sqrt{2}}(\ket{00} + \ket{11})$ のことであり、Qiskit (7) - らんだむな記憶 で確認したことと符合する。