前回イオントラップ方式での位相キックバックを試しました。その際に位相キックバックは制御ユニタリゲートが必要になります。イオントラップ方式でのゲート方式は限られていますが、どうやってイオントラップのゲートの種類でさまざまな論理量子ゲートが実装できるかを見てみたいと思います。
まずは、以前のトライアルでは、Rigettiでは、制御位相シフトゲートがもともと実装されていますので、
.cphase(theta)[0,1]
のようにつかうことができます。簡単です。一方でイオントラップに実装されているのは、cnotやxx,yy,zzのようなイジングゲートです。上記ではイオントラップの実装されているゲートで制御位相シフトを実装する必要があります。
今回利用したのは、下記になります。IonQでは角度の入力の範囲に大きすぎる値やマイナスの値を入れることができませんでした。ですので、角度をいくつか分割しています。
.rz(theta)[1].cnot[0,1].z[1].s[1].rz(np.pi/2-theta/2)[1].cnot[0,1].z[1].s[1].rz(np.pi/2-theta/2)[1]
まずは、途中に
.z[1].s[1].rz(np.pi/2-theta/2)[1]
という場所が二回でます。こちらは本当は、
.rz(-theta/2)[1]
としたかったのですが、IonQマシンではマイナスの角度が入力できなかったので、2pi - theta/2とする必要がありました。
.rz(np.pi*2 - theta/2)[1]
ただ、これでは角度の入力が大きすぎてできなかったのでさらにそれを分解し、
.rz(np.pi + np.pi/2 + np.pi/2 - theta/2)[1]
とし、
.rz(np.pi)[1] = .z[1]
.rz(np.pi/2)[1] = .s[1]
から、
.z[1].s[1].rz(np.pi/2 - theta/2)[1]
と分解できました。
ということで、本題は本来解きたい制御位相シフトゲートですが、下記を作ればよいことになります。
.rz(theta)[1].cnot[0,1].rz(-theta/2)[1].cnot[0,1].rz(-theta/2)[1]
.rz(theta)[1]より、
$$
Rz(\theta) = \begin{bmatrix}e^{-i\theta/2}&0\\0&e^{i\theta/2}\end{bmatrix}
$$
.rz(-theta/2)[1]は、
$$
Rz(-\theta/2) = \begin{bmatrix}e^{i\theta/4}&0\\0&e^{-i\theta/4}\end{bmatrix}
$$
より、
$$
I \otimes Rz(\theta) \cdot CX \cdot I \otimes Rz(-\theta/2) \cdot CX \cdot I \otimes Rz(-\theta/2)
$$
を計算すればよく、
$$
I \otimes Rz(\theta) = \begin{bmatrix}1&0\\0&1\end{bmatrix} \otimes \begin{bmatrix}e^{-i\theta/2}&0\\0&e^{i\theta/2}\end{bmatrix} = \begin{bmatrix}e^{-i\theta/2}&0&0&0\\0&e^{i\theta/2}&0&0\\0&0&e^{-i\theta/2}&0\\0&0&0&e^{i\theta/2}\end{bmatrix}
$$
$$
I \otimes Rz(-\theta/2) = \begin{bmatrix}1&0\\0&1\end{bmatrix} \otimes \begin{bmatrix}e^{i\theta/4}&0\\0&e^{-i\theta/4}\end{bmatrix} = \begin{bmatrix}e^{i\theta/4}&0&0&0\\0&e^{-i\theta/4}&0&0\\0&0&e^{i\theta/4}&0\\0&0&0&e^{-i\theta/4}\end{bmatrix}
$$
$$
\begin{bmatrix}e^{i\theta/4}&0&0&0\\0&e^{-i\theta/4}&0&0\\0&0&e^{i\theta/4}&0\\0&0&0&e^{-i\theta/4}\end{bmatrix}\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&0&1\\0&0&1&0\end{bmatrix}\begin{bmatrix}e^{i\theta/4}&0&0&0\\0&e^{-i\theta/4}&0&0\\0&0&e^{i\theta/4}&0\\0&0&0&e^{-i\theta/4}\end{bmatrix}\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&0&1\\0&0&1&0\end{bmatrix}\begin{bmatrix}e^{-i\theta/2}&0&0&0\\0&e^{i\theta/2}&0&0\\0&0&e^{-i\theta/2}&0\\0&0&0&e^{i\theta/2}\end{bmatrix}
$$
$$
=\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&e^{-i\theta/2}&0\\0&0&0&e^{i\theta/2}\end{bmatrix}
$$
となり、まずはControlled Rzができました。あとはRzゲートのグローバル位相を調整すればよく。コントロールビット側に位相シフトゲートを適用し、
$$
\begin{bmatrix}1&0\\0&e^{i\theta/2}\end{bmatrix} \otimes \begin{bmatrix}1&0\\0&1\end{bmatrix}
$$
を適用することで、
$$
\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&1&0\\0&0&0&e^{i\theta}\end{bmatrix}
$$
とすることができます。最後のphase shiftをIonQで実行するが未確認でした、、時間のある時に確認します。