量子おみくじを作ってみる
そこで早速一つ量子的な魔法のオラクルを作ってみましょう。今の場合、食わせる x は1ビットなので、量子的にキュビット1つの素子でもいいようですが、一般には x は n ビットの場合を考えたいですし、この数 x は後にも使うかもしれないので、そのまま変えないで、出力キュビット y (オラクルキュビット)を別に用意して最下位ビットとして扱う事にします。次のような働きの n+1ビット素子を考えます。
U_f :
|x> → |x'> = |x>
|y> → |y'> = |y .xor. f(x)>
当然ですが y=0 を入れると、オラクルキュビットの方に
|x> → |x>
|0> → |f(x)>
という風に函数 f が出てきて、この素子 U_f は量子オラクルになってます。
実際どうやって作るのか、行列では何に対応するのか、というのも示しておきましょう。これは x が n = 1 ビットの例で、オラクルビットを下位ビットとして加えて2キュビットの状態への演算です。
A:
f(0)=0
f(1)=0 |
|
|
B:
f(0)=0
f(1)=1 |
|
|
C:
f(0)=1
f(1)=0 |
|
|
D:
f(0)=1
f(1)=1 |
|
|
2ビットの x だと可能な2値函数 f(x) は 2^4 = 16 通りありますから、これに対応する3キュビット(入力に2キュビット、オラクルキュビット1)の量子オラクル(8x8の行列)を16個作っておけば良い訳です。練習問題に良いので、皆さんご自身でやってみてください。正解はそのうち秘密の場所にアップしておくつもりです。
|