VQEのansatzに使うUnitary Coupled Cluster 法を再現する回路の例 

VQEの論文では，天下り的にansatzを作る回路が書かれていることが多いので，どうやって一から作ればいいのか考えてみる．

### 参考
- How to prepare Unitary Coupled-Cluster ansatz for VQE in a circuit? <br>
https://quantumcomputing.stackexchange.com/questions/9049/how-to-prepare-unitary-coupled-cluster-ansatz-for-vqe-in-a-circuit/9054#9054
- 量子コンピュータで量子化学計算 <br>
https://qiita.com/YuichiroMinato/items/8e55e11dabc2cee5f52c

#準備

###Pauli行列と単位行列
$\sigma_{x,y,z}$: Pauli行列, 
$I$: 2×2の単位行列
$O$: 2×2のゼロ行列
https://ja.wikipedia.org/wiki/パウリ行列

###X0, X1の行列表現

$\otimes$ : テンソル積( http://enakai00.hatenablog.com/entry/2018/06/03/165815 )
リンク先の「フラットな積」を使って計算を行う．

```math
X_0 = \sigma_x \otimes I = \begin{pmatrix}
0 & 1 \\
1 & 0
\end{pmatrix} \otimes
\begin{pmatrix}
1 & 0 \\
0 & 1
\end{pmatrix}
= \begin{pmatrix}
O & I \\
I & O
\end{pmatrix}
= \begin{pmatrix}
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1 \\
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 
\end{pmatrix}
```
```math
X_1 = I \otimes \sigma_x = \begin{pmatrix}
\sigma_x & O \\
O & \sigma_x 
\end{pmatrix}
```
$Y, Z$に関しても $\sigma_x \rightarrow \sigma_{y,z}$ に置き換えれば良い．

#Coupled-Cluster
Wikipedia: https://ja.wikipedia.org/wiki/%E7%B5%90%E5%90%88%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BC%E6%B3%95

#Unitary Coupled-Cluster (UCC) 法

Variational Quantum Eigensolver (VQE) [参考: https://qiita.com/YuichiroMinato/items/62444351b712743d83b7] の計算を行う際に，初期状態 (ansatz) を準備する．
その一例としてUCC ansatzが用いられている．

簡単な例として$ T(\theta) = \theta a_0^{\dagger}a_1 $を考える．
UCC ansatzの定義に従うと，
$$\begin{align*}
U(\theta) &= \exp[ \theta(a_0^{\dagger}a_1 - a_1^{\dagger}a_0) ] \;. \\\
&= \exp[ i(\theta/2) (X_0Y_1 - X_1Y_0) ]
\end{align*}
$$
とかける．ここでジョルダンーウィグナー ( Jordan-Wigner ) 変換を用いた．

# U(θ)を回路で
$\exp[i(θ/2)Z_0Z_1]$を回路で表してから，それを使って$\exp[ i(\theta/2) (X_0Y_1 - X_1Y_0) ]$を示す．

## exp[i(θ/2)Z0Z1] 
回路は以下のようにかける
![2q48g.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164411/6b806fad-b33d-4502-3d89-876248c168e7.png)
これは回路を行列表現して書き下すと，$\exp[i(θ/2)Z_0Z_1]$と一致していることがわかる．

###補足
回路の演算子は以下の行列でかける．回路は以下の行列の掛け算である。

Controlled NOT gate

```math
\rm{C}_{\rm{NOT}} = \begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 0 & 1 \\
0 & 0 & 1 & 0
\end{pmatrix}
```
$R_z$のgate

```math
I \otimes R_z(\theta) = \begin{pmatrix}
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{pmatrix}
```
ここで1-qubit系の$R_z$はここを参照( https://qiita.com/skiing_LAL10/items/a9ededf64a3991bee191 )

## exp[ i(θ/2) (X0Y1 - X1Y0) ]
次に，$\exp[ i(\theta/2) (X_0Y_1 - X_1Y_0) ]$の変換を回路で実現したい．
回転行列を使うと，$R_y(-\pi/2)$はX軸回転からZ軸回転に変更，$R_x(\pi/2)$はY軸回転からZ軸回転に変更できる．


つまり$\exp[ i(θ/2) (X_0Y_1 ) ]$は，上記の$\exp[i(θ/2)Z_0Z_1]$の回路に対し，<br>1-qubit目に$R_y(-\pi/2)$と$R_y(\pi/2)$を挟み，
2-qubit目に$R_x(\pi/2)$と$R_y(-\pi/2)$を挟めば良い．

<img width="279" alt="ScreenShot 2019-12-23 16.00.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164411/5a04c2e1-f1e6-31b7-b046-a5fcae4da40d.png">

同様に，$\exp[ -i(θ/2) (X_1Y_0 ) ]$も作れる．


結局，$\exp[ i(\theta/2) (X_0Y_1 - X_1Y_0) ]$は<img width="515" alt="ScreenShot 2019-12-23 16.02.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164411/ec29bcf0-d0fa-fd46-b5fb-d9b35bd13ff2.png">
とかける．

#別の表記
$\exp[ i(\theta/2) (X_0Y_1 - X_1Y_0) ]$の演算子は結局，$|00\rangle$から$\cos(\theta/2)|00\rangle + \sin(\theta/2)|11>$を作る演算子である．つまり

<img width="142" alt="ScreenShot 2019-12-23 16.10.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/164411/9351cc95-675c-7324-3c81-ea4d27740633.png">

で十分．