まずは、Phase Estimator の基礎となる、量子フーリエ変換の実装を解説します。
(離散)フーリエ変換とは?
形式的に言うと、 成分の複素ベクトル を 成分の複素ベクトル に変換する、次の計算式です。
--- (1)
このような変換を考えて何が嬉しいのかと言うと・・・、実はこの変換には、元の成分 を数列とみなした時に、この数列が持つ「周期性」を検出する機能があります。
論より証拠で具体例を見てみましょう。
まず、 の成分がすべて同じ(言うなれば周期 0)の場合で、 とします。対応する の方は、(複素数をグラフ表示するのは難しいので)実部を取り出してグラフに描きます。
これを見ると、 の方は、 だけが値を持っています。つまり、 は周期 0 (定数)を示すフラグなのです。
次に、 として同様のグラフを描きます。
この場合、 は の範囲でちょうど1回振動する(この範囲を単位として)周期1の三角関数です。 の方は、 と だけが値を持っています。つまり、この2つが周期1のフラグと言えます。(連続的なフーリエ変換を知っている方は、 が値を持つのが気持ち悪いかもしれませんが、今は値を持つ部分が離散的なので、周期 1/2 と周期 1/30 の区別がつかないことが理由です。)
あとは大体予想がつきますが、 とすると次の結果になります。
は の範囲で2回振動する(この範囲を単位として)周期0.5の三角関数です。 の方は、 と だけが値を持っています。
この変換は、複数の周期を合成したものを検知することもできます。次の関数を考えてみましょう。
結果は次の通りです。
周期1と周期0.5に対応するフラグがどちらも反応していることがわかります。
このようにフーリエ変換を用いると、さまざまな関数の「周期性」を発見するのに役立てることができます。
・・・これ自体は量子回路と何の関係もありませんが、フーリエ変換を愚直に実行すると計算量は になります。つまり、 項の級数を 変数分計算する必要があります。より高速に計算する FFT (高速フーリエ変換)のアルゴリズムが知られていますが、この場合の計算量は です。一方、量子回路を用いると、 の計算量でこれを実行することができます。つまり、フーリエ変換は、量子コンピューターを用いることで、古典コンピューターよりも高速に実行できるのです。
量子ビットによるフーリエ変換の表現
(1) のフーリエ変換はベクトルの成分を用いて表されていましたが、線形変換になっていることがわかります。したがって、この成分表示に対応する正規直交基底を として、それぞれの基底ベクトルの変換法則がわかれば十分です。具体的には、
として、フーリエ変換を と表すことにすると、次の関係が成り立ちます。
これより、基底ベクトルの変換法則は次になることがわかります。
--- (2)
ここで、 個ある基底ベクトルを 個の量子ビットで表現します。これは単純に を二進数表記に直して、各桁のビットを量子ビットに置き換えます。たとえば、 として、次のような対応になります。
一般に、 個の量子ビットによる基底ベクトルを と表すと、次の対応関係が成り立ちます。
--- (3)
ここに、 は の二進数表記(つまり )とします。
そして、この「量子ビット基底ベクトル」を用いると、(2) の変換は量子ビットごとの変換に置き換えることができます。 とする時、(3) のルールを用いて (2) を書き直すと次のようになります。
--- (4)
最後の の部分は、二進数表記 を用いると、
であることから、 より、次のように簡単化できます。
これを (4) に代入して、最終的に次の関係が得られます。
--- (5)
ここまでは量子回路とは関係のない、ただのテンソル計算と見ることもできますが、実はこの最後の表式から、この変換はアダマールゲート と位相シフトゲート
()
を用いた量子回路で実装できることがわかります。上記の位相シフトは、 として実装できます。( 演算を物理実装する制御パルスの照射時間を変化させます。)
また、二進数表記を用いると、位相シフトゲートは次のようにも表現できます。(これが量子回路実装のポイントになります。)
--- (6)
量子回路によるフーリエ変換の実装
結論から言うと、次の量子回路で実装できます。
はじめに、 に対する の流れを見ます。まず、
の関係に注意すると、
が成り立ちます。次に、 を演算すると、(6) の関係に注意して次が成り立ちます。
以下同様にして、 を演算すると、最初の量子ビット は次のように変化します。
2つ目以降の量子ビットについても同様の処理が行われるので、最後の まで演算したところで、全体の状態は次になります。
これは、(5) の量子ビットの順番を反転させたものになっているので、最後にスワップゲートを組み合わせて、量子ビットの順序を並び替えれば完成です。