クォータニオンでSolovay-Kitaevのアルゴリズム(の式(10))

## Solovay-Kitaevのアルゴリズム、式(10)

量子アルゴリズムにおいて、任意のユニタリを単純な回転操作だけで近似するアルゴリズム
[THE SOLOVAY-KITAEV ALGORITHM]
(https://arxiv.org/abs/quant-ph/0505030)
の中に、二軸の回転の合成、つまり、ユニタリ行列 $V$, $W$ について、$V$ を $x$軸まわりの $\phi$ 回転、$W$ を$y$軸まわりの $\phi$ 回転とするとき、回転の合成 $U=VWV^\dagger W^\dagger$ は、ある回転軸に対して、

```math
\sin{(\theta / 2)} = 2 \sin^2{(\phi / 2)\sqrt{1-\sin^4{(\phi / 2)}}} \hspace{20mm} (10)
```
を満たす $\theta$ の回転を行う変換に等しい。

というのがありますが、これをオイラー角による回転変換の合成から求めるのはとても大変そうです。回転変換の合成、といえば「クォータニオン」を使って計算すると楽にできるのではないか？ということで、やってみます。

## クォータニオン

クォータニオン（四元数） $\tilde{q}$は、複素数の拡張であり、次式で表されます。

```math
\tilde{q} = q_0 + i q_1 + j q_2 + k q_3
```
ただし、$i, j, k$ はクォータニオンの虚数単位で、

```math
i^2 = j^2 = k^2 = ijk = -1 \\
ij = -ji = k \\
jk = -kj = i \\
ki = -ik = j
```
です。

クォータニオンは「実部」と「虚部」に分けて

```math
\begin{align}
\tilde{q} &= q_0 + \hat{q} \\
\\
\hat{q} &= i q_1 + j q_2 + k q_3
\end{align}
```
と表現するものとします。（クォータニオンは「波型つき」、純虚クォータニオンは「山形帽子つき」）
また、

```math
\tilde{q}^{*}　=   q_0 - \hat{q} 
```
を $\tilde{q}$ の「共役（共軛）クォータニオン」と呼びます。


## クォータニオンによる回転表現

三次元ベクトル $\vec{r} = (x, y, z)$ を純虚クォータニオンで表すとき、

```math
\hat{r} = ix + jy + kz
```

ノルムが$1$の法線ベクトル $\vec{n}$ の回りに、角度 $\theta$ の回転を表現するクォータニオン $\tilde{q}$ は、

```math
\tilde{q} = \cos{\frac{\theta}{2}} \; + \hat{n}\sin {\frac{\theta}{2}}
```
と表現できて、位置ベクトル $ \vec{r} $ を $\vec{r'} $ へと回転移動させる変換は、

```math
\begin{align}
\hat{r'} &= \tilde{q} \hat{r} \tilde{q}^{*} \\
&= \big( \cos{\frac{\theta}{2}} + \hat{n}\sin {\frac{\theta}{2}}\big)
 \hat{r}
 \big( \cos{\frac{\theta}{2}} - \hat{n}\sin {\frac{\theta}{2}}\big)
\end{align}

```
で計算することができます。

なお、2つのクォータニオン $\tilde{q} ,\tilde{p} $の積は、成分ごとに分解して掛けあわせて求めることが出来ます。

```math
\begin{align}
\tilde{q}\tilde{p} & = (q_0 + \hat{q})(p_0 + \hat{p}) \\

& = (q_0 + i q_1 + j q_2 + k q_3)(p_0 + i p_1 + j p_2 + k p_3) \\

& = (q_0 p_0 - q_1 p_1 - q_2 p_2 - q_3 p_3 ) \\
& + i (q_1 p_0 + q_0 p_1 + q_2 p_3 - q_3 p_2) \\
& + j (q_2 p_0 + q_0 p_2 + q_3 p_1 - q_1 p_3) \\
& + k (q_3 p_0 + q_0 p_3 + q_1 p_2 - q_2 p_1) \\

\end{align}
```



## 回転の合成

論文中にある回転をクォータニオンで表現します。
「$V$ を $x$軸まわりの $\phi$ 回転、$W$ を$y$軸まわりの $\phi$ 回転とする。」

$x$軸を表すベクトルをクォータニオンで表すと、$\hat{x} = i$ なので、

```math
V =  \cos{\frac{\phi}{2}} + i \sin {\frac{\phi}{2}}, \;
V^\dagger =  \cos{\frac{\phi}{2}} - i \sin {\frac{\phi}{2}}

```

同様に$y$軸まわりの回転$W$は、

```math
W =  \cos{\frac{\phi}{2}} + j \sin {\frac{\phi}{2}}, \;
W^\dagger =  \cos{\frac{\phi}{2}} - j \sin {\frac{\phi}{2}}
```

で表すことができます。

論文の記述に従って、まず、$WV^\dagger W^\dagger$ を計算してみます。
クォータニオンの成分ごとに順々に掛けていくだけなので、行列計算よりもわかりやすいのではないかと思います。なお、虚数成分$i, j, k$は乗算に関して可換ではないので、掛ける順序に注意が必要です。

```math
\begin{align}
WV^\dagger W^\dagger &=
\big( \cos{\frac{\phi}{2}} + j \sin {\frac{\phi}{2}} \big)
\big( \cos{\frac{\phi}{2}} - i \sin {\frac{\phi}{2}} \big)
\big( \cos{\frac{\phi}{2}} - j \sin {\frac{\phi}{2}} \big) \\
&= \cos^3{\frac{\phi}{2}}
+ j \sin{\frac{\phi}{2}} \cos^2{\frac{\phi}{2}}
- i \cos^2{\frac{\phi}{2}} \sin{\frac{\phi}{2}}
+ k \sin^2{\frac{\phi}{2}} \cos{\frac{\phi}{2}} \\
& - j \cos^2{\frac{\phi}{2}} \sin{\frac{\phi}{2}}
- j^2 \sin^2{\frac{\phi}{2}} \cos{\frac{\phi}{2}}
+ ij \cos{\frac{\phi}{2}} \sin^2{\frac{\phi}{2}}
- kj \sin^3{\frac{\phi}{2}} \\
&= \cos{\frac{\phi}{2}} + i \big(- \sin{\frac{\phi}{2}} \cos{\phi} \big) + k \big( \sin{\frac{\phi}{2}} \sin{\phi} \big)
\end{align}
```
この回転が論文中に記されている、
「$-\hat{x}$軸 を$\hat{y}$軸まわりに角度$\phi$だけ回転させて得られる軸   $\hat{m} (-\cos{\phi}, 0, \sin{\phi})$による回転」
であることが式の形からわかると思います。

ひきつづき、$V(WV^\dagger W^\dagger)$ を計算します。

```math
\begin{align}
V(WV^\dagger W^\dagger) &= 
\big( \cos{\frac{\phi}{2}} + i \sin {\frac{\phi}{2}} \big)
\Big(
 \cos{\frac{\phi}{2}} + i \big(- \sin{\frac{\phi}{2}} \cos{\phi} \big) + k \big( \sin{\frac{\phi}{2}} \sin{\phi} \big)
\Big) \\
&=
\big( 1 - \sin^2{\frac{\phi}{2}} (1 - \cos{\phi})\big) \\
&+ i \big( \frac{1}{2} \sin{\phi} (1 - \cos{\phi}) \big)
+ j \big( - \sin^2{\frac{\phi}{2}} \sin{\phi} \big)
+ k \big( \frac{1}{2} \sin^2{\phi} \big)
\end{align}
```
角度を$(\phi / 2)$にまとめると、

```math
\begin{align}
V(WV^\dagger W^\dagger) &= (1 - 2 \sin^4{\frac{\phi}{2}}) \\
&+ i \big( 2 \sin^3 {\frac{\phi}{2}} \cos{\frac{\phi}{2}} \big)
+ j \big(-  2 \sin^3 {\frac{\phi}{2}} \cos{\frac{\phi}{2}} \big)
+ k \big( 2 \sin^2{\frac{\phi}{2}} \cos^2{\frac{\phi}{2}} \big)

\end{align}
```
これが、「軸 $\hat{n}$ まわりに$\theta$ 回転することに等しい」ということで、

```math
V(WV^\dagger W^\dagger) = \cos{\frac{\theta}{2}} + \hat{n} \sin{\frac{\theta}{2}}
```
と比較すると（ここでは角度$\theta$にのみ興味があるので）、

```math
\cos{\frac{\theta}{2}} = 1 - 2 \sin^4{\frac{\phi}{2}}
```
さらに簡単な変形で、


```math
\sin^2{\frac{\theta}{2}} = 4 \sin^4{\frac{\phi}{2}} \big(1 - \sin^4{\frac{\phi}{2}} \big)
```
となり、式(10)を確認することができました。

## まとめ

量子アルゴリズムにおいて、純粋状態は単位球であるブロッホ球面上にプロットすることができ、また、ユニタリ変換は球面上の点を回転（または鏡像）変換することに相当します。量子アルゴリズム内での計算は、量子ビット1つに対する操作を$2 \times 2$の行列で表現されますが、今回はこれをクォータニオンを使うことで球面上の回転変換の合成を比較的簡単に計算することができました。

クォータニオンは、回転操作を簡単に扱えるという点で、量子計算以外の分野（姿勢制御やコンピューターグラフィックスなど）でも様々な応用がされており、今後も活用していきたいと思います。

クォータニオンと三次元空間での回転操作の相互の関係については、
[クォータニオン計算便利ノート](http://www.mss.co.jp/technology/report/pdf/18-07.pdf)
がとてもわかりやすく、今回も大いに参考にさせていただきました。この場を借りて御礼申し上げます。