Q#というMS製の量子計算用言語の言語仕様 Q# statements | Microsoft Docs を読んでいたら、
というゲートが、基本的なゲートたちと観測の組み合わせで正確に実現できるという話を見たので、調べてみました。
準備
状態|0>を、状態|1>をとします。状態ベクトルを複数並べた時の表示も、適切に定義されているものとします。例えば、
,,,
です。
とを、それぞれ,と定義します。
とを、 が成り立つような線形写像とします。ここではクロネッカーのデルタです。2量子ビット以上の系についても、などのように定義されているものとします。
ビットの位置は先頭が第0ビットであるものとします。0-indexedです。
以下の基本的なゲートたちの知識を仮定します。
(Xゲート, X|0> = |1>, X|1> = |0>)
(Zゲート, Z|0> = |0>, Z|1> = -|1>)
(Tゲート, Z|0> = |0>, )
CCNOT: (Toffoliゲート、CCNOT|11a> = |11(1-a)>, CCNOT|abc>=|abc> (a=0またはb=0のとき)
また、[1] に倣って、作りたいユニタリ変換にV_3という名前をつけます。
Aがエルミート行列()のとき、Aをオブザーバブルと呼びます。オブザーバブルAに関する観測とは、量子ビットをAの固有ベクトルの一つへと収縮させる行為を指します。量子ビットに対して、この量子ビットがAの固有ベクトル|v>へと収縮する確率はです。
例えば、Xゲートはエルミート行列ですが、Xに関してある量子ビットを観測すると、 または のどちらかの状態に収縮します。前者に収縮する確率はで、後者に収縮する確率はです。
やり方
[1]のFigure 1.(a) の量子回路に即して説明します。この回路は、ゲート1個と、Zゲート1個、およびXゲートに関する観測を2回行う回路です。この回路に量子ビットを入力すると、確率5/8でに、確率3/8でになります。よって、平均8/5回でユニタリ変換V_3が実現できます。
この事実を計算で示すのが、この記事の目標です。1ステップずつ見ていきましょう。
証明
と置きます。aとbはを満たす複素数であることに注意してください。
Ancilla bit (操作のために追加で足される量子ビット) たちも合わせた初期状態は
です。
これにToffoliゲートを適用すると、
になります。
これの第2ビット(ancilla bitではないビット)にSゲートを適用すると、
になります。
これにもう一度Toffoliゲートを適用すると、
になります。
これにZゲートを適用すると、
になります。
これのancilla bitたちをXに関して観測しましょう。両方のビットで|+>が観測されると第2ビットがになるということだったので、それを確かめます。これが起こる確率は、で与えられるので、計算します。ここで、です。
のため、
です。
観測後の第2ビットの状態は、を規格化することで得られ、
です。
量子ビットの状態は、絶対値1の複素数倍を無視するので、これは
と等価です。(となります。)
のancilla bitたちの観測時に|++>以外が観測された場合には第2ビットがのままとなりますが、これの計算は読者への演習問題とします。 (訳: 疲れました)
References
[1] Paetznick, A., & Svore, K. M. (2013). Repeat-Until-Success: Non-deterministic decomposition of single-qubit unitaries, 1–26. Retrieved from http://arxiv.org/abs/1311.1074