量子コンピューター量子ゲートでハマる所
「ゲート」と「測定」で同じアルファベットを使ってる。
多分、意味はあるんでしょうけどね。でもね… 混乱する。
◯Xゲート(ビット反転)とX測定は違う。
◯Yゲート(位相・ビット反転)とY測定は違う。
◯Zゲート(位相反転)とZ測定は違う。
◯アダマール変換Hで困ったらリー群を読め。(ちょっとつらいけど)
◯特にCNotは難しい!これはGeminiに要質問。
q[0]が|0>でアダマール変換Hすると(|0>+|1>)/√2、
q[1]が|0>で|1>Xでアダマール変換Hすると(|0>-|1>)/√2
これをCNotするって何?となりがち。
これにはテンソル積が分からないとならない。
悩んだら、Geminiに聞くと親切に教えてくれる!
人間と違って何度聞いても嫌がったりしません。
こんな書き方でいい。
① ② ③ ④ ⑤
q[0] |0> → H ↑ →H
q[1] |0> →X→H→Cnot →H
の計算過程を段階ごとに詳しく教えて。
実際にやってみましょう。私も数時間は掛かってしまった。
特に、制御ビットが重ね合わせになっているというのが意味不明ですよね。
①では
q[0]は |0>
q[1]は |0>
②ではq[1]がXゲートなのでビット反転して
q[0]は |0>
q[1]は |1>
③ではq[0]とq[1]がアダマール変換Hなので
q[0]は (|0>+|1>)/√2
q[1]は (|0>-|1>)/√2
問題は④です。
④では制御ビットがq[0]、ターゲットビットがq[1]なので
ターゲットビットをまずはq[0]⊗q[1]でテンソル積にします。
q[1]は…(太字はq[0]の制御ビットです)
q[0]⊗q[1]=(|0>+|1>)/√2⊗(|0>-|1>)/√2
=1/2(|00>-|01>+|11>-|10>)
ここで、制御ビットが1の場合は、
ターゲットビットをビット反転したいのでした。
すると太字の部分が制御ビットなので…
1/2(|00>-|01>+|10>-|11>) → 1/2(|00>-|01>+|11>-|10>)
となり
q[1]=1/2(|00>-|01>+|11>-|10>)です。
これは
= (|0>-|1>)/√2⊗ (|0>-|1>)/√2 と表現出来るので
⑤で再びアダマール変換Hをかけると
|11> になります。