Help us understand the problem. What is going on with this article?

IBM Quantum ExperienceとBlueqatでCCXゲート(トフォリゲート)を体験してみる

量子コンピュータ初心者です。前回に引き続きIBM Quantum ExperienceとBlueqatを使って、$CCX$ゲート(トフォリゲート)を試してみます。

CCXゲート(トフォリゲート)image.png

$CCX$ゲートは3量子ビットの演算です。$CX$ゲートの拡張版?みたいな感じで、制御ビットが1つ増えて2個あります。トマソ・トフォリによって作られたのでトフォリゲートとも呼ばれます。
2つの制御ビットが共に1になったときに、ターゲットビットを反転します。

CCXゲートの準備

Circuit Composerで'q' register qubitsを3にして3量子ビットにします。さらに$CCX$ゲートを配置します。慣例に沿って測定のアイコンも入れておきます。
image.png

Measurement Probabilityの結果を見ると000になっています。まだ何もしていないので当然ですね。
image.png

CCXゲートを使ってみる

q[0]とq[1]に$X$ゲートを入れて動作を確認してみます。

制御ビットの片方だけ1の場合

q[0]に$X$ゲートを適用して片方だけ1の状態にしてみます。当然のことながらターゲットビットは反転されずそのまま出力され、結果は001となります。Circuit Composerでは結果は後→前の順番で出てきますので、q[0]の結果が最後の1にあたります。
image.png

ターゲットビットに$X$ゲートを適用しても、そのまま出力されて結果は101になります。
image.png

制御ビットが両方1の場合

q[0]とq[1]の両方に$X$ゲートを適用すると、ターゲットビットが反転されます。いまq[2]はもともと0ですので反転されて結果は111になりました。
image.png

q[2]にも$X$ゲートを適用しておくと、反転されて結果は011になりました。
image.png

Blueqatのコード

同じような操作をBlueqatでやってみます。

from blueqat import Circuit
res = []
res.append(Circuit(3).ccx[0,1,2].m[:].run(shots=1))          #000
res.append(Circuit(3).x[2].ccx[0,1,2].m[:].run(shots=1))     #001
res.append(Circuit(3).x[1].ccx[0,1,2].m[:].run(shots=1))     #010
res.append(Circuit(3).x[1,2].ccx[0,1,2].m[:].run(shots=1))   #011
res.append(Circuit(3).x[0].ccx[0,1,2].m[:].run(shots=1))     #100
res.append(Circuit(3).x[0,2].ccx[0,1,2].m[:].run(shots=1))   #101
res.append(Circuit(3).x[0,1].ccx[0,1,2].m[:].run(shots=1))   #110
res.append(Circuit(3).x[:].ccx[0,1,2].m[:].run(shots=1))     #111

for i in res:
  print(i)

実行すると2つの制御ビットが共に1のとき(最後の110と111)だけターゲットビットが反転されていることがわかります。なおBlueqatでは量子ビットの順番(q[0],q[1],q[2])で結果が出てきます。Circuit Composerとは逆なので注意してください。

Counter({'000': 1})
Counter({'001': 1})
Counter({'010': 1})
Counter({'011': 1})
Counter({'100': 1})
Counter({'101': 1})
Counter({'111': 1})
Counter({'110': 1})

参考資料

Blueqatチュートリアル トフォリゲート

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした