| 古典ビット | 量子ビット |
---|
物理的実体 | 電圧の高低 | 量子状態 (電子のスピン, 光の偏光, ...) |
数学的理想化 | (古典) ビット 0,1 | 量子ビット α∣0⟩+β∣1⟩ |
基本操作 (ゲート) | AND, OR, NOT, ... | X, Y, Z, H, T, S, ... |
量子ビットと確率
量子ビット
α∣0⟩+β∣1⟩(α,β∈C,∣α∣2+∣β∣2=1)
を観測すると、確率 ∣α∣2,∣β∣2 で状態 ∣0⟩,∣1⟩ が得られる。
- ∣0⟩=1×∣0⟩+0×∣1⟩ を観測すると、確率 ∣1∣2 で ∣0⟩ が得られる。
つまり、確実に ∣0⟩ が得られる。
- ∣1⟩=0×∣0⟩+1×∣1⟩ を観測すると、確率 ∣1∣2 で ∣1⟩ が得られる。
つまり、確実に ∣1⟩ が得られる。
- 21∣0⟩+21∣1⟩ を観測すると、確率 21 で ∣0⟩ または ∣1⟩ が得られる。
- 21∣0⟩−21∣1⟩ を観測すると、確率 21 で ∣0⟩ または ∣1⟩ が得られる。
3.,4. より、異なる量子ビットが同じ確率分布をもちうることが分かる。
量子ビットのベクトル表現
量子ビット α∣0⟩+β∣1⟩ は、
[αβ]∈C2
というベクトルで表現できる。
- ∣0⟩=1×∣0⟩+0×∣1⟩ は [10]
- ∣1⟩=0×∣0⟩+1×∣1⟩ は [01]
- 21∣0⟩+21∣1⟩ は [2121]
- 21∣0⟩−21∣1⟩ は [21−21]
量子ゲートの行列表現
例えば X ゲートは、∣0⟩↦∣1⟩,∣1⟩↦∣0⟩ という操作を表す。
(つまり、X ゲートはビット反転を表す)
このとき X ゲートは行列を用いて
X=[0110]
と表せる。
例えば X ゲートを [αβ] に作用させると
X([αβ])=[0110][αβ]=[βα]
となり、∣0⟩↦∣1⟩,∣1⟩↦∣0⟩ が確認できる。
他の量子ゲート
YZHSR=[0i−i0]=[100−1]=21[111−1]=[100i]=[100exp(4iπ)]
アダマールゲート H
H=21[111−1]
∣0⟩,∣1⟩ に H ゲートを作用させると
H([10])H([01])=21[111−1][10]=2121=21[111−1][01]=21−21
となり、H ゲートは
∣0⟩∣1⟩↦21∣0⟩+21∣1⟩↦21∣0⟩−21∣1⟩
という操作を表すことが分かる。
また、H2=I (I は単位行列) であることから、H ゲートを2回作用させると元の状態に戻ることが分かる。
H2([10])H2([01])=H2121=21[111−1]2121=[10]=H21−21=21[111−1]21−21=[01]
テンソル積
2つの量子ビット ψ=α∣0⟩+β∣1⟩,ϕ=γ∣0⟩+δ∣1⟩ があるとき、これらのテンソル積は
ψ⊗ϕ
で表される。
これを計算すると
ψ⊗ϕ=(α∣0⟩+β∣1⟩)⊗(γ∣0⟩+δ∣1⟩)=α∣0⟩⊗γ∣0⟩+α∣0⟩⊗δ∣1⟩+β∣1⟩⊗γ∣0⟩+β∣1⟩⊗δ∣1⟩=αγ∣0⟩⊗∣0⟩+αδ∣0⟩⊗∣1⟩+βγ∣1⟩⊗∣0⟩+βδ∣1⟩⊗∣1⟩
となる。
また、あるテンソル積 ∣a⟩⊗∣b⟩ は ∣ab⟩ と表すことができる。
(ab は a と b の連結)
これを用いると
ψ⊗ϕ=αγ∣00⟩+αδ∣01⟩+βγ∣10⟩+βδ∣11⟩
と表せる。
量子ビット ψ⊗ϕ を観測すると、確率 ∣αγ∣2,∣αδ∣2,∣βγ∣2,∣βδ∣2 で状態 ∣00⟩,∣01⟩,∣10⟩,∣11⟩ が得られる。
2量子ビットと関数
x に対する関数 y=f(x) を量子ビットで表現すると
Uf(∣a⟩⊗∣b⟩)=∣a⟩⊗∣b⊕f(a)⟩
と表せる。
なぜ Vf(∣a⟩)=∣f(a)⟩ と表現できないのか
詳細は省く (というか私が分かってない) が、このような Vf はハードウェアで実装できない。
(ユニタリでない)
f(0)=0,f(1)=1 の場合を考える。
a | b | Uf(∣a⟩⊗∣b⟩) |
---|
0 | 0 | ∣00⟩ |
0 | 1 | ∣01⟩ |
1 | 0 | ∣11⟩ |
1 | 1 | ∣10⟩ |
上2行を見ると、f(a)=0 なので、2ビット目がそのまま b になっている。
下2行を見ると、f(a)=1 なので、2ビット目が b⊕1 (b の反転) になっている。
f(0)=1,f(1)=1 の場合を考える。
a | b | Uf(∣a⟩⊗∣b⟩) |
---|
0 | 0 | ∣01⟩ |
0 | 1 | ∣00⟩ |
1 | 0 | ∣11⟩ |
1 | 1 | ∣10⟩ |
Deutsch アルゴリズム
関数 y=f(x) は f(0)=f(1) または f(0)=f(1) のどちらを満たすかを判定したいとする。
古典計算では、f(0)=f(1) か f(0)=f(1) かを判定するためには、f(0),f(1) を計算して比較する必要がある。
量子計算では、Deutsch アルゴリズムを用いることで、この判定を1回の計算で行うことができる。
具体的には
(H⊗1)Uf(H⊗H)∣01⟩の左の量子ビット={01(f(0)=f(1))(f(0)=f(1))
まず H⊗H∣01⟩ を計算すると
(H⊗H)∣01⟩=H∣0⟩⊗H∣1⟩=(21∣0⟩+21∣1⟩)⊗(21∣0⟩−21∣1⟩)=21∣00⟩−21∣01⟩+21∣10⟩−21∣11⟩=21[∣0⟩⊗(∣0⟩−∣1⟩)+∣1⟩⊗(∣0⟩−∣1⟩)]これに Uf を作用させると
Uf(H⊗H)∣01⟩=Uf(21{∣0⟩⊗(∣0⟩−∣1⟩)+∣1⟩⊗(∣0⟩−∣1⟩)})=21{Uf[∣0⟩⊗(∣0⟩−∣1⟩)]+Uf[∣1⟩⊗(∣0⟩−∣1⟩)]}=21[∣0⟩⊗(∣0⊕f(0)⟩−∣1⊕f(0)⟩)+∣1⟩⊗(∣0⊕f(1)⟩−∣1⊕f(1)⟩)]=⎩⎨⎧21[∣0⟩⊗(∣0⟩−∣1⟩)+∣1⟩⊗(∣0⟩−∣1⟩)]21[∣0⟩⊗(∣1⟩−∣0⟩)+∣1⟩⊗(∣1⟩−∣0⟩)](f(0)=0)(f(0)=1)ここで (−1)f(x)={1−1(f(x)=0)(f(x)=1) であることを用いると
Uf(H⊗H)∣01⟩=21[(−1)f(0)∣0⟩⊗(∣0⟩−∣1⟩)+(−1)f(1)∣1⟩⊗(∣0⟩−∣1⟩)]これに H⊗1 を作用させると
(H⊗1)21Uf(H⊗H)∣01⟩=(H⊗1)21[(−1)f(0)∣0⟩⊗(∣0⟩−∣1⟩)+(−1)f(1)∣1⟩⊗(∣0⟩−∣1⟩)]=221[(−1)f(0)(∣0⟩+∣1⟩)⊗(∣0⟩−∣1⟩)+(−1)f(1)(∣0⟩−∣1⟩)⊗(∣0⟩−∣1⟩)]=221{[(−1)f(0)+(−1)f(1)]∣0⟩⊗(∣0⟩−∣1⟩)+[(−1)f(0)−(−1)f(1)]∣1⟩⊗(∣0⟩−∣1⟩)}ここで
(−1)f(0)+(−1)f(1)(−1)f(0)−(−1)f(1)={2(−1)f(0)0(f(0)=f(1))(f(0)=f(1))={02(−1)f(0)(f(0)=f(1))(f(0)=f(1))であることを用いると
(H⊗1)Uf(H⊗H)∣01⟩=⎩⎨⎧21(−1)f(0)∣0⟩⊗(∣0⟩−∣1⟩)21(−1)f(0)∣1⟩⊗(∣0⟩−∣1⟩)(f(0)=f(1))(f(0)=f(1))となり、これを観測すると
左の量子ビット={01(f(0)=f(1))(f(0)=f(1))となる。