らんだむな記憶

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

<QT> CX ゲートの反転


を見たい。

def create_circuit(q0, q1):
    qc = QuantumCircuit(2)
    if q0 != 0:
        qc.x(0)
    if q1 != 0:
        qc.x(1)
    qc.h(0)
    qc.h(1)
    qc.cx(0, 1)
    qc.h(0)
    qc.h(1)
    qc.measure_all()
    return qc

が回路の実装になる。
$\ket{10}$ を入力してみよう。

$$
\begin{align*}
\ket{10} \xrightarrow{H \otimes H}&\ \frac{1}{2}(\ket{00} + \ket{01} - \ket{10} - \ket{11}) \\
\xrightarrow{CX_{0,1}}&\ \frac{1}{2}(\ket{00} + \ket{11} - \ket{10} - \ket{01}) \\
=&\ \frac{1}{\sqrt{2}}(\ket{-0} - \ket{-1}) = \ket{--} \xrightarrow{H \otimes H} \ket{11}
\end{align*}
$$

同様に $i,j \in \{0,1\}$ として、

$$
\begin{align*}
\ket{ji} \xrightarrow{CX_{0,1} (H \otimes H)}&\ \frac{\ket{0} + (-1)^j \ket{1}}{\sqrt{2}} \otimes \frac{\ket{0} + (-1)^{i+j} \ket{1}}{\sqrt{2}} \\
\xrightarrow{H \otimes H}&\ \ket{j} \otimes H \frac{\ket{0} + (-1)^{i+j} \ket{1}}{\sqrt{2}} = \ket{j} \otimes \ket{i \oplus j}
\end{align*}
$$

を得る。これをそれぞれの $i,j$ で計算すると

  • $\ket{00} \xrightarrow{CX_{0,1} (H \otimes H)} \ket{++} \xrightarrow{H \otimes H} \ket{00}$
  • $\ket{01} \xrightarrow{CX_{0,1} (H \otimes H)} \ket{+-} \xrightarrow{H \otimes H} \ket{01}$
  • $\ket{10} \xrightarrow{CX_{0,1} (H \otimes H)} \ket{--} \xrightarrow{H \otimes H} \ket{11}$
  • $\ket{11} \xrightarrow{CX_{0,1} (H \otimes H)} \ket{-+} \xrightarrow{H \otimes H} \ket{10}$

となる。まとめると、$\ket{ji} \xrightarrow{(H \otimes H) CX_{0,1} (H \otimes H)} \ket{j\quad i \oplus j}$ である。
よって、$(H \otimes H) CX_{0,1} (H \otimes H) = CX_{1,0}$ が分かった。

重ね合わせの状態にない 2 量子ビットの場合、位相ゲートを適用してもグローバル位相が変化するのみであるので、測定結果に影響がない。一方重ね合わせの状態にある 2 量子ビットの場合、位相ゲートの適用が双対位相の部分に影響するので測定結果に影響が出てくる。このため、アダマールゲートを適用して両方の量子ビットを重ね合わせ状態にすることに意味がある。