この記事について
こちらの記事で制御ユニタリゲートでは何番目の量子ビットを制御ビットにするのかが重要だということを取り上げました。
具体的には0番目の量子ビットを制御ビットにする場合と、1番目の量子ビットを制御ビットにする場合では、制御ユニタリゲートが少し異なります。
本記事では、0番目、1番目の量子ビットを制御ビットとしたときの制御ユニタリゲートをただひたすらまとめていこうと思います。
チートシートとして使ってください。
また、量子コンピュータ関係の他の記事は、下記で紹介しています。
表記方法
こちらの記事で述べている通り、量子ビットを数えるとき、二通りの解釈方法があります。
- 最上位ビット (Most Significant Bit - MSB)を左にとる。
- 最上位ビット (Most Significant Bit - MSB)を右にとる。
のどちらかです。
例えば、IBMのQiskitは前者(実装により変更可)で、AmazonBraketは後者です。
古典コンピュータの世界ではビット列表現で示したときに前者と同様に、「最上位ビット (Most Significant Bit - MSB)を左にとる。」という形です。
本記事の読者はおそらく古典からやってきている方もいるかと思いますので
- 最上位ビット (Most Significant Bit - MSB)を左にとる。
を採用しようかと思います。
具体例でいうと、$|01\rangle$で示すと、0ビット目は1、1ビット目は0を表すこととなります。
制御ゲートの考え方などはこちらの記事にまとめているので参考にしてください。
今回は以下の2量子制御ユニタリゲートをまとめていきます。
- 制御Xゲート(制御NOTゲート)
- 制御Yゲート
- 制御Zゲート
- 制御アダマールゲート
- 制御回転ゲート
- 制御位相回転ゲート
- 制御u3回転ゲート
では、まとめていきます。
0量子ビット目が制御ビットの場合
基本形
C_U =
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & u_{00} & 0 & u_{01} \\
0 & 0 & 1 & 0 \\
0 & u_{10} &0 & u_{11}
\end{pmatrix}
制御Xゲート(制御NOTゲート)
制御量子ビットが$|1\rangle$のとき、ターゲット量子ビットを反転します。
C_U =
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 0 & 0 & 1 \\
0 & 0 & 1 & 0 \\
0 & 1 & 0 & 0
\end{pmatrix}
制御Yゲート
制御量子ビットが$|1\rangle$のとき、ターゲット量子ビットにYゲートを適用します。
C_U =
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 0 & 0 & -i \\
0 & 0 & 1 & 0 \\
0 & i & 0 & 0
\end{pmatrix}
制御Zゲート
制御量子ビットが$|1\rangle$のとき、ターゲット量子ビットの位相を反転させます。
ただし、Zゲートはもともと$|0\rangle$に対しては何もしないので、$|11\rangle$の状態の場合にのみ作用し、1量子ビット目が制御ビットの時と同じになります。
C_U =
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & -1
\end{pmatrix}
制御アダマールゲート
制御量子ビットが$|1\rangle$のとき、ターゲット量子ビットにアダマールゲートを適用します。
C_U =
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & \frac{1}{\sqrt{2}} & 0 & \frac{1}{\sqrt{2}} \\
0 & 0 & 1 & 0 \\
0 & \frac{1}{\sqrt{2}} & 0 & -\frac{1}{\sqrt{2}}
\end{pmatrix}
制御回転ゲート
制御量子ビットが$|1\rangle$のとき、ターゲット量子ビットにZ軸周りの回転ゲートを適用します。
C_U =
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & e^{-i\lambda/2} & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & e^{i\lambda/2}
\end{pmatrix}
制御位相回転ゲート
制御Zゲートと同様の考え方で $|11\rangle$に状態のときのみ作用し、位相の回転を実行します。
そのため、1量子ビット目が制御ビットの場合と同じになります。
C_U =
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & e^{i\lambda}
\end{pmatrix}
制御u3回転ゲート
制御量子ビットが$|1\rangle$のとき、ターゲットビットを$U_3$回転させます。
C_U =
\begin{pmatrix}
1 & 0 & 0 & 0\\
0 & e^{-i(\phi+\lambda)/2}\cos(\theta/2) & 0 & -e^{-i(\phi-\lambda)/2}\sin(\theta/2)\\
0 & 0 & 1 & 0\\
0 & e^{i(\phi-\lambda)/2}\sin(\theta/2) & 0 & e^{i(\phi+\lambda)/2}\cos(\theta/2)
\end{pmatrix}
1量子ビット目が制御ビットの場合
基本形
C_U =
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & u_{00} & u_{01} \\
0 & 0 & u_{10} & u_{11}
\end{pmatrix}
制御Xゲート(制御NOTゲート)
制御量子ビットが$|1\rangle$のとき、ターゲット量子ビットを反転します。
C_U =
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 0 & 1 \\
0 & 0 & 1 & 0
\end{pmatrix}
制御Yゲート
制御量子ビットが$|1\rangle$のとき、ターゲット量子ビットにYゲートを適用します。
C_U =
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 0 & -i \\
0 & 0 & i & 0
\end{pmatrix}
制御Zゲート
制御量子ビットが$|1\rangle$のとき、ターゲット量子ビットの位相を反転させます。
ただし、Zゲートはもともと$|0\rangle$に対しては何もしないので、$|11\rangle$の状態の場合にのみ作用し、0量子ビット目が制御ビットの時と同じになります。
C_U =
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & -1
\end{pmatrix}
制御アダマールゲート
制御量子ビットが$|1\rangle$のとき、ターゲット量子ビットにアダマールゲートを適用します。
C_U =
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\
0 & 0 & \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}}
\end{pmatrix}
制御回転ゲート
制御量子ビットが$|1\rangle$のとき、ターゲット量子ビットにZ軸周りの回転ゲートを適用します。
C_U =
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & e^{-i\lambda/2} & 0 \\
0 & 0 & 0 & e^{i\lambda/2}
\end{pmatrix}
制御位相回転ゲート
制御Zゲートと同様の考え方で $|11\rangle$に状態のときのみ作用し、位相の回転を実行します。
そのため、0量子ビット目が制御ビットの場合と同じになります。
C_U =
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & e^{i\lambda}
\end{pmatrix}
制御u3回転ゲート
制御量子ビットが$|1\rangle$のとき、ターゲットビットを$U_3$回転させます。
C_U =
\begin{pmatrix}
1 & 0 & 0 & 0\\
0 & 1 & 0 & 0\\
0 & 0 & e^{-i(\phi+\lambda)/2}\cos(\theta/2) & -e^{-i(\phi-\lambda)/2}\sin(\theta/2)\\
0 & 0 & e^{i(\phi-\lambda)/2}\sin(\theta/2) & e^{i(\phi+\lambda)/2}\cos(\theta/2)
\end{pmatrix}
以上が代表的な2量子制御ユニタリゲートとなります。
是非参考にしてみてください。