本記事ではこちらを教科書として、今回は量子フーリエ変換を取り上げたいと思います。Jupyter notebookを https://github.com/sin-gee/ImageOfQuantumBit/ImageOfFourieTransform.ipynb に置いておきますのでよろしければ試してみてください。
「フーリエ変換とは何か」を語るのは、この記事のキャラ外と思い、量子フーリエ変換でやりたいことをまず模式的に表してみます。
左から、各量子ビットに$1$又は$0$を設定すると、各量子ビットの位相差に変換される、というものです。
ここで、「数式、うっ!」となった方のために、少し解説しますが、不要な方は次の量子回路の説明まで読み飛ばしてください。
まず、$k=2^2k_2+2^1k_1+2^0k_0$のクダリですが、($1$又は$0$をとる量子)bitで数値を表現する手法です。パソコンをお持ちの方は、電卓アプリを立ち上げて「プログラマー」設定に替えてBIN(Binary)で数値(1又は0)を打ち込んでみてください。3bitの場合は0~7、4bitの場合は0~15の整数を表現することができます。
一方の、$e^{2\pi i x}$ですが、$\pi$は御存知、円周率≒3.14、$i$は虚数2乗すると$-1$、$e$はネイピア数≒2.72です。円周率が数学界のキングならネイピア数はクイーン、虚数はジョーカーといった感じでしょうか。ネイピア数を円周率×虚数乗する式になっている訳ですが、この「$n$乗する」は「$n$回掛ける」という意味ではもはやなく、数学でよく行われる”矛盾なく意味を拡張”したものです。で、図にするとこんな感じ。
横軸を実数、縦軸を虚数にした平面の半径$1$の円上の位置を表しています。勘の良い方は御気づきのとおり、ブロッホ球を北極方向から見た赤道に相当します。なお、左端の$-1=e^{\pi i}$は最も美しい式の呼び声も高いオイラーの公式です。
さて、今回、取り上げる量子回路はこれ。
$q_2$に対する操作、$q_1$に対する操作、$q_0$に対する操作、SWAP(量子ビットの入れ替え)で最後に測定となっています。断っておきますが、この測定はダミーです。というのも、どういう条件であっても各ビットは$\lvert0\rangle$と$\lvert1\rangle$の50/50の混合状態になるからです。本当は、各ビットの位相(のずれ)を測定できるとよいのですが、オーセンティックな量子コンピュータ(のシミュレータ)ではそれはできません。ですので、通常、量子フーリエ変換がベタな形で使われることは無いと思います。使われ方としては、次回、解説するつもりである(量子フーリエ変換を逆転させた)量子位相推定でしょう。
では始めます。まず$q_2$への操作ですが、SWAP後に$q_0$として出力されるビットを作っています。$q_0$としては$\lvert0\rangle$と$\lvert1\rangle$の混合状態で、$\lvert1\rangle$の位相は$e^{2\pi i k/2^3}$でした。これは
$e^{2\pi i k/2^3}=e^{2\pi i (2^2k_2+2^1k_1+2^0k_0)/2^3}=e^{\pi i (k_2+1/2^1k_1+1/2^2k_0)}=e^{\pi i k_2}e^{\pi i/2 k_1}e^{\pi i/4 k_0}$
と回路と式は符合します。 「ん?$e^{\pi i k_2}$は?」と思われた方、これはアダマールゲート(H)が該当します。アダマールゲートは$k=0$の場合は$\lvert0\rangle+\lvert1\rangle$に、$k=1$の場合に$\lvert0\rangle-\lvert1\rangle$となるわけですが、$e^{\pi i 0}=1$、$e^{\pi i 1}=-1$ことから説明できます(後者はオイラーの公式でした)。
$q_1$以降も、$e^{2\pi i}=1$であることに注意が必要な他は同様です。
用意したJupyter notebookでやってみます。 まず量子ビットを用意します
#量子bit×3の生成
import dataclasses
@dataclasses.dataclass
class Qbit:
phi: float # ブロッホ球での|0>からの角度
shift: float # 位相差
#量子bit0
Q1 = Qbit(math.pi*1,math.pi*0)
#量子bit1
Q2 = Qbit(math.pi*0,math.pi*0)
#量子bit2
Q3 = Qbit(math.pi*1,math.pi*0)
今回は$\lvert101\rangle=5$を設定してみました。で、結果はこちら。
$q_0$の位相は$\lvert001\rangle$の$1.25\pi$、$q_1$の位相は$\lvert010\rangle$の$0.5\pi$、$q_2$の位相は$\lvert100\rangle$の$1.0\pi$となりました。