<QT> Single Qubit Gates - らんだむな記憶 で既に見たが、$HXH = Z$ と $HZH = X$ が成立する。よって、物理的なノイズの増大はさておき、論理的には、X ゲートから Z ゲートを実装できる。同様に $CZ_{0,1} = H CX_{0,1} H$ と実装できる。
簡単な証明としては:
$$
\begin{align*}
\ket{j0} \xrightarrow{H_1 CX_{0,1} H_1} \ket{j0}
\end{align*}
$$
$$
\begin{align*}
\ket{j1} \xrightarrow{H_1 CX_{0,1} H_1} (-1)^j \ket{j1}
\end{align*}
$$
が計算で分かるので、これは $CZ_{0,1}$ である。
また、$SWAP = CX_{0,1} CX_{1,0} CX_{0,1}$ である。${00}$ ではどのゲートも何もせず、$\ket{01}$, $\ket{10}$, $\ket{11}$ の場合はどれかのゲートが動作しない形で情報が交換される。
Find a different circuit that swaps qubits in the states $\ket{+}$ and $\ket{-}$, and show that this is equivalent to the circuit shown above.
に取り組んでみる。$\ket{+}$, $\ket{-}$ と $\ket{0}$, $\ket{1}$ の世界を行ったり来たりすることで実現してみる。$\ket{+} \leftrightarrow \ket{0}$, $\ket{-} \leftrightarrow \ket{1}$ を可能にするゲートは $H$ ゲートである。$\ket{+} \leftrightarrow \ket{-}$ を可能にするゲートは $Z$ ゲートである。これを踏まえて制御量子ビットに一旦アダマールゲートを適用して X-基底を Z-基底の世界に持ってくる。制御量子ビットが $\ket{-}$ の時にターゲット量子ビットの側では “NOT” が適用されるように $Z$ ゲートを適用する形とし、textbook の SWAP ゲートの分解を参考に以下のような回路を考える:
def swap(q0, q1): qc = QuantumCircuit(2) if q0: qc.x(0) if q1: qc.x(1) qc.cx(0, 1) qc.cx(1, 0) qc.cx(0, 1) return qc def another_swap(q0, q1, superposition=False): def subgate(qc, i, j): qc.h(i) qc.cz(i, j) qc.h(i) qc = QuantumCircuit(2) if q0: qc.x(0) if q1: qc.x(1) if superposition: qc.h(0) qc.h(1) subgate(qc, 0, 1) subgate(qc, 1, 0) subgate(qc, 0, 1) return qc
のような実装をして
usim = Aer.get_backend('aer_simulator') qc = swap(0, 0) qc.save_unitary() qobj = assemble(qc) results = svsim.run(qobj).result() unitary = results.get_unitary() array_to_latex(unitary)
と
usim = Aer.get_backend('aer_simulator') qc = another_swap(0, 0) qc.save_unitary() qobj = assemble(qc) results = svsim.run(qobj).result() unitary = results.get_unitary() array_to_latex(unitary)
の結果がともに
$$
\begin{align*}
\begin{bmatrix}
1 & 0 & 0& 0 \\
0 & 0 & 1& 0 \\
0 & 1 & 0& 0 \\
0 & 0 & 0& 1
\end{bmatrix}
\end{align*}
$$
になることで回路の等価性は確認できる。
qc = another_swap(0, 0, True) qc.draw('mpl')
で回路を可視化すると以下のようになる: