量子位相オラクル
さて今作った f(x) のオラクル U_f を持ち出して、なにか量子的な操作をを行いたい訳ですが、実はこのままで使うより、次のような行列
V_f = U_f ・ W ・ U_f
を作ってみたほうが便利な場合が多くあります。W は前に出ましたが、最下位ビット(この場合はオラクルビット)が0ならばそのまま、1ならば状態に位相 (-1) を掛けるという操作に対応します。この行列 V_f をキュビット|x> とオラクルビット |0> からなる状態に作用させると
V_f |x>|0> = U_f・W |x>| f(x)>
= U_f (-1)f(x) |x>| f(x)>
= (-1)f(x) |x>| 0>
となります。つまり元の状態が位相 (-1)f(x) だけ掛けられて出てきます。そこで V_f のことを函数 f の「位相オラクル」と呼びましょう。
x が1ビットの場合の例が判りかりやすいので、見てみましょう。
よく見るとオラクルビットは(無いとそもそも V_f ができませんが)結果として|0>のままいるだけです。、そこでV_f を状態|x>に直接作用する次元 2^n の行列
V_f |x> = (-1) f(x) |x>
と看做してしまうのが楽です。また x が1ビットの場合の例をみると
となって非常に簡単です。x が2ビットの場合も読者ご自身でぜひ作ってみてください。
|