1〜3量子ビットの量子回路を、状態ベクトルで「厳密に」計算しています。確率的なサンプリングはありません。
1量子ビットの状態は、2つの複素数(振幅)で表します。
n 量子ビットでは、2n 個の振幅を持つベクトルになります(3量子ビットで8個)。ゲーム内では、上の線(q0)を最上位ビットとして |q0 q1 q2⟩ の順に並べ、実数部と虚数部を交互に並べた配列で持っています。n が1増えるとメモリと計算量が2倍になるので、50量子ビット前後で通常のコンピュータでは扱えなくなります。これが「量子コンピュータは古典コンピュータで効率的に再現できない」と期待される根拠の一つです。
回路の各ゲートは、状態ベクトルにかけるユニタリ行列(確率の総和 1 を保つ行列)です。1量子ビットゲートは、対象のビットだけが違う2つの振幅の組 (|…0…⟩, |…1…⟩) に 2×2 行列をかけます。
2量子ビットゲートは、状態ベクトルの添字(ビット列)の入れ替えや符号反転として実装しています(4×4 行列を作る必要はありません)。列は左から順に適用され、同じ列の中のゲートは別々の線に作用する必要があります。
1量子ビットの純粋状態は、球面上の1点で表せます。
CNOT は、制御ビットが |1⟩ のときだけ標的を反転します。制御ビットが重ね合わせのとき、その両方の枝に同時に作用するので、積の形で書けない状態ができます。
これはコピーではありません。未知の量子状態を複製することはできません(複製不可能定理)。CNOT がするのは「相関を作る」ことです。H・CZ・H = CNOT(標的側を H で挟む)、CNOT 3個 = SWAP、といった等式も、ステージ7・8で確かめられます。
全体にかかる位相(全体位相)は観測できないので、比較では無視します。
F ≥ 0.999 で合格です。ただし相対位相(例えば |0⟩+|1⟩ と |0⟩−|1⟩ の違い)は区別されるので、Z や S をかけ忘れると不合格になります。動作ステージでは、すべての入力基底に対する出力を比べるため、「たまたま特定の入力だけ合っている」回路は通りません。
コストの値は、現実のハードウェアの数字ではなく、ゲームのために付けた「相対的な重み」です。ただし、少ないゲートで同じ結果を出すことが、ノイズの多い現在の装置でも誤り訂正でも重要、という点は現実と同じです。
H, S, CNOT(とパウリ行列)だけで作れる回路はクリフォード回路と呼ばれ、ビット数が多くても古典コンピュータで効率よく再現できます(ゴッテスマン–ニルの定理)。ここに T ゲートを加えると、一般の量子計算を(任意の精度で)作れるようになります。つまり、量子計算の「力」の源は T ゲート(のような非クリフォードな操作)にあります。T を2回かけると S と同じになります(45°+45°=90°)。
N 個の候補から「答え」を1つ探す問題です。普通は平均 N/2 回調べますが、グローバー法は約 (π/4)√N 回の繰り返しで見つけます(2次の高速化)。1回の繰り返しは次の2操作です。
幾何学的には、状態は「答え」と「それ以外の一様な状態」が張る平面内にあり、1回の繰り返しで角度 2θ(sinθ = 1/√N)ずつ答えに近づきます。k 回後の成功確率は sin²((2k+1)θ) です。N=4 では 1 回でちょうど 100%。N=8 では 1 回で 78.1%、2 回で 94.5%、3 回目は行き過ぎて約 33% に下がります(回しすぎも禁物)。
コストは CCZ を 6(実機では T ゲート多数に分解されるため)としています。