らんだむな記憶

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

Qiskit (40) ― HHL アルゴリズム

十分に準備をしたので、HHL アルゴリズムを再開する。Qiskit (39) ― HHL アルゴリズム - らんだむな記憶 のおさらいとして、ある $2^n \lambda_j^\prime \in \Z$ がとれて、$2^n \lambda_j^\prime$ の $n$-bit バイナリ表現を ket の中に入れた状態 $|\lambda_j^\prime \rangle$ を使って、

$$
\begin{align*}
\ket{0}^{\otimes n} \otimes \ket{b} \xrightarrow{QPE} \sum_{j=0}^{n-1} |\lambda_j^\prime \rangle \otimes \beta_j \ket{a_j}
\tag{1}
\end{align*}
$$

となるのであった(そういう都合の良いケースだけを考えていた)。ここで、$\ket{b} = \sum_{j=0}^{n-1} \beta_j \ket{a_j}$ である。

この後、

  • 幾らか演算を適用して欲しい情報を取得し、
  • 不要な部分には QPE の逆演算 $QPE^\dagger = QPE^{-1}$ を適用して初期状態に戻す

ことになる。

$U_f^\prime$ の適用

$\ket{0} \otimes \ket{x} \xrightarrow{U_f^\prime} \ket{f(x)} \otimes \ket{x}$ に相当するユニタリ操作について以下で述べられる:

欲しい情報を複製するための補助ビットを追加する。書籍では最上位(?)に追加するようだ。つまり、$\ket{0} \otimes \sum_{j=0}^{n-1} |\lambda_j^\prime \rangle \otimes \beta_j \ket{a_j}$ としている。

textbook では次の操作がすごいざっくりと書かれているが、ここの部分は書籍のほうが丁寧だ。第 2 レジスタ(?)の状態に合わせて第 1 量子ビットに回転を適当するような制御ゲート $CR_y(\theta)_{2,1}$ を適用する。具体的には第 2 レジスタの状態が $|\lambda_j^\prime \rangle$ の時に第 1 量子ビット に $R_y(\theta_i)$ を適用する。ここで、$|C| \leq \min_j \{|\lambda_j^\prime|\}$ なる正規化定数がとれて $\sin \frac{\theta_j}{2} = \frac{C}{\lambda_j^\prime}$ を満たすとする。$R_y(\theta)$ は

$$
\begin{align*}
R_y(\theta) = \begin{pmatrix}
\cos \frac{\theta}{2} & - \sin \frac{\theta}{2} \\
\sin \frac{\theta}{2} & \cos \frac{\theta}{2}
\end{pmatrix}
\end{align*}
$$

であったので $R_y(\theta) \ket{0} = \sin \frac{\theta}{2} \ket{0} + \cos \frac{\theta}{2} \ket{1}$ である。よって、

$$
\begin{align*}
\ket{0} \otimes \sum_{j=0}^{n-1} |\lambda_j^\prime \rangle \otimes \beta_j \ket{a_j} =&\ \ket{0} \otimes |\lambda_0^\prime \rangle \otimes \beta_0 \ket{a_0} + \cdots + \ket{0} \otimes |\lambda_j^\prime \rangle \otimes \beta_{n-1} \ket{a_{n-1}} \\
\xrightarrow{CR_y(\theta)_{2,1} \otimes I}&\ \sum_{j=0}^{n-1} R(\theta_j) \ket{0} \otimes |\lambda_j^\prime \rangle \otimes \beta_j \ket{a_j} \\
=&\ \sum_{j=0}^{n-1} \left(\sqrt{1 - \left(\frac{C}{\lambda_j^\prime}\right)^2} \ket{0} + \frac{C}{\lambda_j^\prime} \ket{1} \right) \otimes |\lambda_j^\prime \rangle \otimes \beta_j \ket{a_j}
\tag{2}
\end{align*}
$$

を得る。というわけで、書籍は (4.11.4) 式(つまりここでの (1) 式)の時点で微妙に不正確な式になっていたのだが、(4.11.5') 式(つまりここでの (2) 式)で正確な式に戻ってきた。

ここまでの操作が小見出しに書いた $U_f^\prime$ に相当する。

(2) 式の第 2 レジスタと第 3 ビットに逆演算 $QPE^{-1}$ を適用して

$$
\begin{align*}
\sum_{j=0}^{n-1} \left(\sqrt{1 - \left(\frac{C}{\lambda_j^\prime}\right)^2} \ket{0} + \frac{C}{\lambda_j^\prime} \ket{1} \right) \otimes \ket{0}^{\otimes n} \otimes \beta_j \ket{a_j}
\end{align*}
$$

となる。

全体像

全部をまとめて書くと、

$$
\begin{align*}
\ket{0} \otimes \ket{0}^{\otimes n} \otimes \ket{b} &\xrightarrow{QPE} \ket{0} \otimes \sum_{j=0}^{n-1} |\lambda_j^\prime \rangle \otimes \beta_j \ket{a_j} \\
&\xrightarrow{U_f^\prime} \sum_{j=0}^{n-1} \left(\sqrt{1 - \left(\frac{C}{\lambda_j^\prime}\right)^2} \ket{0} + \frac{C}{\lambda_j^\prime} \ket{1} \right) \otimes |\lambda_j^\prime \rangle \otimes \beta_j \ket{a_j} \\
&\xrightarrow{QPE^{-1}} \sum_{j=0}^{n-1} \left(\sqrt{1 - \left(\frac{C}{\lambda_j^\prime}\right)^2} \ket{0} + \frac{C}{\lambda_j^\prime} \ket{1} \right) \otimes \ket{0}^{\otimes n} \otimes \beta_j \ket{a_j}
\end{align*}
$$

となって、第 1 ビットの部分に、$R_y(\theta_j) \ket{0}$ という、$\ket{b} = \sum_{j=0}^{n-1} \beta_j \ket{a_j}$ の直行成分に対応する $A$ の固有値 $\lambda_j$ と対応する値 $\lambda_j^\prime = \frac{t \lambda_j}{2 \pi}$ の情報、特に逆数が現れた。

逆演算の手続きを実際に応用すると案外難しいと感じる。$V_f^\dagger$ を構成できるような $V_f$ に相当する分が $QPE$ であるが、それ自身も大きな回路であるので、全体像を如何にコンパクトにまとめてうまく頭の中でスッキリできるかにかかっていそうだ。

これで、書籍 p.154 (4.11.6) 式まで完了したことになる。