量子ゲートは状態を変える操作
量子ゲートは、量子ビットの状態を変える操作です。ふつうの回路の NOT や AND にあたります。
ゲートは、小さな数の表(行列)を状態にかけて、新しい状態を作ります。このレッスンでは、X、Z、H の3つのゲートを、手と Python で動かします。
このレッスンのゴール
メモ
量子ビットにゲートを当てて、新しい状態を求められる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| ゲート | 量子ビットの状態を変える操作 | |
| 行列 | 数を行と列に並べた表 | |
| Xゲート | 0と1の振幅を入れ替えるゲート | |
| Zゲート | 1の振幅の符号を変えるゲート | |
| Hゲート | 0と1を同じ重みで混ぜるゲート | アダマールゲート |
| 重ね合わせ | 0にも1にも振幅がある状態 |
学生が入力するセルは、このプレビューでは空白です。
ゲートは行列を状態にかける
ゲートは、2行2列の行列です。状態にかけると、新しい状態ができます。
新しい0の振幅は、1行目と状態を、成分ごとにかけて足した数です。新しい1の振幅は、2行目で同じことをします。
3つのゲートの行列
| ゲート | 1行目 | 2行目 | はたらき |
|---|---|---|---|
| X | [0, 1] | [1, 0] | 0と1を入れ替える |
| Z | [1, 0] | [0, -1] | 1の振幅の符号を変える |
| H | [1, 1] を √2 で割る | [1, -1] を √2 で割る | 0と1を同じ重みで混ぜる |
学生が入力するセルは、このプレビューでは空白です。
行列のかけ算を手でする
# X ゲートを [1, 0] に当てます。行列は2行2列のリストです。
gate = [[0, 1], [1, 0]]
state = [1, 0]
new_zero = gate[0][0] * state[0] + gate[0][1] * state[1]
new_one = gate[1][0] * state[0] + gate[1][1] * state[1]
print([new_zero, new_one])
# state を [0, 1] に変えて、もう一度実行してください。
# 0と1は、どうなりますか。
ラボは X と H を表示する
ラボの gates.py は、|0> に X と H を当てて、結果を表示します。
表示される言葉は英語です。X on |0> は、0の状態に X ゲートを当てたという意味です。chance of 0 and of 1 は、0と1の確率です。
X と H を当てる
docker exec jupyter python3 steps/gates.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
Z ゲートは符号だけを変える
Z ゲートは、|0> には何もしません。|1> の振幅の符号だけを、プラスからマイナスにします。
[0.6, 0.8] に当てると [0.6, -0.8] になります。2乗するとどちらも同じなので、確率は変わりません。
よくある間違い
注意
符号が変わっても確率が同じなら、Z は何もしないと考えがちです。確率はそのままでも、状態は別物です。次のゲートで混ぜると、結果の確率が変わります。第5回で見ます。
H ゲートは重ね合わせを作る
H ゲートは、|0> を [0.707, 0.707] にします。0にも1にも、同じ大きさの振幅があります。この状態を重ね合わせと呼びます。
0.707 は 1 を √2 で割った数です。2乗すると 0.5 なので、0と1の確率は半々です。
H ゲートを手で当てる
import math
# H ゲートは、同じ大きさの重みで混ぜます。
s = 1 / math.sqrt(2)
gate = [[s, s], [s, -s]]
state = [1, 0]
new_zero = gate[0][0] * state[0] + gate[0][1] * state[1]
new_one = gate[1][0] * state[0] + gate[1][1] * state[1]
print(round(new_zero, 3), round(new_one, 3))
# state を [0, 1] に変えて、もう一度実行してください。
# 2つ目の符号は、どうなりますか。
さらに挑戦: 状態を順に追う
[1, 0] から始めて、X、H、Z の順にゲートを当てます。各段階の状態を、表に書き出してください。
最後の状態で、0と1の確率はいくつですか。Z が確率を変えなかった理由も、一文で書きましょう。