このガイドでは、量子ビットを表現するために用いる数学モデルを学びます。このモデルは天才数学者ジョン・フォン・ノイマンによって作られ、極めて成功してきました。何度も検証され、今なお世界を正確に予測しています。それこそが良いモデルである証です!
P.S. 多くの方がモデルそのものを量子ビットと取り違えます。これから出てくる数式そのものが量子ビットだと考えてしまうのです。これは単純な誤解です。物理学は、自然界で観察される事象を正確に表す数学モデルを構築する学問です。量子ビットは私たちが完全に理解しているとは到底言えない、自然界の物理的な対象です。下に示す数学は、その振る舞いを予測するために構築した道具、つまり一つのモデルにすぎません。
単一量子ビット
量子ビットの状態を書き表す一般的な方法は2つあります。1つは直感的、もう1つは非常に有用です。直感的な方法はブロッホベクトル、つまり3D空間のベクトルとして書き表すもので、量子ビットとは?のガイドで詳しく学べます。これは想像しやすいですが、量子ビットがもつれている状態を表そうとすると深刻な限界に直面します。そのため真剣な議論には、状態ベクトル表記と呼ばれる方法を用います。
状態ベクトル表記の良いところは、量子ビットを測定したらどのような結果が出るかという観点に根ざしている点です。
ステップ1: 測定結果を選ぶ
最初のステップは、量子測定の結果として何があり得るかを決めることです。たとえば、有名なシュテルン-ゲルラッハの実験では、シュテルンとゲルラッハは電子のスピンが上向きか下向きかを測定していました。したがって測定結果は上または下でした。
この2つの結果に名前を付けます。慣例として、ケット記法で書きます:
|0⟩
「ケット・ゼロ」と読みます。1つ目の測定結果を表す慣例的な記号 — たとえばシュテルン-ゲルラッハの
上。|1⟩
「ケット・ワン」と読みます。もう1つの測定結果 — たとえばシュテルン-ゲルラッハの
下。
ステップ2: 状態をベクトルとして書く
状態ベクトルとは、各測定結果にどれだけの重み(あるいは振幅)があるかを成分として持つベクトルです。第1成分は|0⟩に対する振幅、第2成分は|1⟩に対する振幅に対応します。
2つの測定結果を2本の直交する軸(|0⟩軸と|1⟩軸)として描き、状態|ψ⟩をその平面上のベクトルとして可視化します。
ケット形式では同じものを|ψ⟩ = α|0⟩ + β|1⟩と書きます。列ベクトルとしてはそのまま[α, β]です。
|ψ⟩ = α|0⟩ + β|1⟩ ⇔ [α, β]
振幅は確率ではない
振幅は徐々に馴染んでいく概念です。振幅は確率ではありません — 確率の「平方根」です。たとえば、ある状態が|0⟩に対して振幅1/√2を持つとき、|0⟩を測定する確率は(1/√2)² = 1/2 = 50%です。これはボルンの規則として知られています。
P(measure |0⟩) = |α|2
P(measure |1⟩) = |β|2
状態ベクトルの例
重みがすべて|0⟩にある
[1, 0]
|0⟩を測定する確率 =1² = 100%。重みがすべて|1⟩にある
[0, 1]
|1⟩を測定する確率 =1² = 100%。等しい重ね合わせ
[1/√2, 1/√2]
(1/√2)² = 1/2の確率で各結果が出る。50/50。複素数を含む重ね合わせ
[1/√2, i/√2]
やはり50/50 — 大きさの2乗は
|i/√2|² = 1/2— ただし第2成分の位相が異なる。偏った重ね合わせ
[√0.3, √0.7]
|0⟩は(√0.3)² = 30%、|1⟩は(√0.7)² = 70%。
ここで重要な点に気づいてください。上のどの例でも、振幅の2乗の和は1になります。これは偶然ではなく、厳しい規則です。すべての可能な結果の確率の合計は100%でなければならないので:
|α|2 + |β|2 = 1
振幅は複素数であり得ます。複素振幅を扱う場合、ボルンの規則は α² ではなく大きさの2乗 |α|² = α·α* を用います。
全体位相は無関係
このように状態ベクトルを書くと、小さな冗長性が生じます。すべての振幅に同じ大きさ1の複素数(-1、i、e^(iπ/3)などの「位相因子」)を掛けても、記述している物理状態は同じです。ボルンの規則は |振幅|² に依存するので、すべての振幅に大きさ1の因子を掛けても測定確率は一切変わりません。
この共通因子を全体位相と呼びます。全体位相だけが異なる2つの状態ベクトルは物理的に区別できません — 起こり得るすべての測定について、まったく同じ結果を予測します。
複数の量子ビット
次に複数の量子ビットの状態を表す方法を学びます。可能な測定結果の組み合わせごとに新しい次元を作るだけです。
つまり、n個の量子ビットの状態を表すベクトルは 2ⁿ 個の成分を持ちます。このベクトルも状態ベクトルと呼びます。単一量子ビットの場合と同様に、成分は複素数になり得て、それらの大きさの2乗の合計は1でなければなりません。
statevector dimension = 2n
2量子ビットの場合、可能な結果は |00⟩, |01⟩, |10⟩, |11⟩ の4つで、状態ベクトルは4成分です。3量子ビットなら8成分、10量子ビットなら1024成分。次元は量子ビット数に対して指数関数的に増えます — 大規模な量子系を古典コンピュータで模擬するのが困難な、まさにその理由です。
操作
量子系に対して行うあらゆる操作は、状態ベクトルを入力として受け取り、状態ベクトルを出力しなければなりません。そして新しい状態ベクトルも、状態ベクトルの全ての規則 — 単位球面上にあることを含む — を満たす必要があります。
操作が線形であれば、行列として表現できます。制約は入出力が共にノルム1でなければならないこと。単位球面を保つ行列をユニタリと呼びます。
操作を状態ベクトルに適用する方法は行列の掛け算です。ユニタリ行列 U を状態ベクトル |ψ⟩ に掛け、結果 U|ψ⟩ が新しい状態ベクトルになります。
|ψ’⟩ = U|ψ⟩
測定
量子コンピュータに対して行う最後の操作が測定です — 量子系から情報を取り出す方法です。
測定の手順は3ステップです:
- ボルンの規則 (
|振幅|²) を使って、各結果の確率を計算する。 - その確率に従って結果を1つランダムに選ぶ。
- 選ばれた結果に対応する単位ベクトルで状態ベクトルを置き換える。
たとえば、状態 |ψ⟩ = (1/√2)|0⟩ + (1/√2)|1⟩ を測定すると、|0⟩を50%の確率で、|1⟩を50%の確率で得ます。サンプリングで |0⟩ を得たなら、測定後の状態ベクトルは |0⟩ = [1, 0] です。重ね合わせは消えています — これが、人々が測定によって状態が「収縮する」と言うときの意味です。