よんログ

量子計算

古典ビット量子ビット
物理的実体電圧の高低量子状態 (電子のスピン, 光の偏光, ...)
数学的理想化(古典) ビット 0,10,1量子ビット α0+β1\alpha \ket{0} + \beta \ket{1}
基本操作 (ゲート)AND, OR, NOT, ...X, Y, Z, H, T, S, ...

量子ビットと確率

量子ビット

α0+β1(α,βC,α2+β2=1)\alpha \ket{0} + \beta \ket{1} \quad (\alpha, \beta \in \mathbb{C}, |\alpha|^2 + |\beta|^2 = 1)

を観測すると、確率 α2,β2|\alpha|^2, |\beta|^2 で状態 0,1\ket{0}, \ket{1} が得られる。

  1. 0=1×0+0×1\ket{0} = 1 \times \ket{0} + 0 \times \ket{1} を観測すると、確率 12|1|^20\ket{0} が得られる。 つまり、確実に 0\ket{0} が得られる。
  2. 1=0×0+1×1\ket{1} = 0 \times \ket{0} + 1 \times \ket{1} を観測すると、確率 12|1|^21\ket{1} が得られる。 つまり、確実に 1\ket{1} が得られる。
  3. 120+121\frac{1}{\sqrt{2}} \ket{0} + \frac{1}{\sqrt{2}} \ket{1} を観測すると、確率 12\frac{1}{2}0\ket{0} または 1\ket{1} が得られる。
  4. 120121\frac{1}{\sqrt{2}} \ket{0} - \frac{1}{\sqrt{2}} \ket{1} を観測すると、確率 12\frac{1}{2}0\ket{0} または 1\ket{1} が得られる。 3.,4. より、異なる量子ビットが同じ確率分布をもちうることが分かる。

量子ビットのベクトル表現

量子ビット α0+β1\alpha \ket{0} + \beta \ket{1} は、

[αβ]C2\begin{bmatrix} \alpha \\ \beta \end{bmatrix} \in \mathbb{C}^2

というベクトルで表現できる。

  1. 0=1×0+0×1\ket{0} = 1 \times \ket{0} + 0 \times \ket{1}[10]\begin{bmatrix} 1 \\ 0 \end{bmatrix}
  2. 1=0×0+1×1\ket{1} = 0 \times \ket{0} + 1 \times \ket{1}[01]\begin{bmatrix} 0 \\ 1 \end{bmatrix}
  3. 120+121\frac{1}{\sqrt{2}} \ket{0} + \frac{1}{\sqrt{2}} \ket{1}[1212]\begin{bmatrix} \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \end{bmatrix}
  4. 120121\frac{1}{\sqrt{2}} \ket{0} - \frac{1}{\sqrt{2}} \ket{1}[1212]\begin{bmatrix} \frac{1}{\sqrt{2}} \\ -\frac{1}{\sqrt{2}} \end{bmatrix}

量子ゲートの行列表現

例えば XX ゲートは、01,10\ket{0} \mapsto \ket{1}, \ket{1} \mapsto \ket{0} という操作を表す。 (つまり、XX ゲートはビット反転を表す)

このとき XX ゲートは行列を用いて

X=[0110]X = \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix}

と表せる。

例えば XX ゲートを [αβ]\begin{bmatrix} \alpha \\ \beta \end{bmatrix} に作用させると

X([αβ])=[0110][αβ]=[βα]X\left(\begin{bmatrix} \alpha \\ \beta \end{bmatrix}\right) = \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix} \begin{bmatrix} \alpha \\ \beta \end{bmatrix} = \begin{bmatrix} \beta \\ \alpha \end{bmatrix}

となり、01,10\ket{0} \mapsto \ket{1}, \ket{1} \mapsto \ket{0} が確認できる。

他の量子ゲート

Y=[0ii0]Z=[1001]H=12[1111]S=[100i]R=[100exp(iπ4)]\begin{aligned} Y &= \begin{bmatrix} 0 & -i \\ i & 0 \end{bmatrix} \\ Z &= \begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix} \\ H &= \frac{1}{\sqrt{2}} \begin{bmatrix} 1 & 1 \\ 1 & -1 \end{bmatrix} \\ S &= \begin{bmatrix} 1 & 0 \\ 0 & i \end{bmatrix} \\ R &= \begin{bmatrix} 1 & 0 \\ 0 & \exp(\frac{i\pi}{4}) \end{bmatrix} \end{aligned}

アダマールゲート HH

H=12[1111]H = \frac{1}{\sqrt{2}} \begin{bmatrix} 1 & 1 \\ 1 & -1 \end{bmatrix}

0,1\ket{0}, \ket{1}HH ゲートを作用させると

H([10])=12[1111][10]=[1212]H([01])=12[1111][01]=[1212]\begin{aligned} H\left( \begin{bmatrix} 1 \\ 0 \end{bmatrix} \right) &= \dfrac{1}{\sqrt{2}} \begin{bmatrix} 1 & 1 \\ 1 & -1 \end{bmatrix} \begin{bmatrix} 1 \\ 0 \end{bmatrix} \\ &= \begin{bmatrix} \dfrac{1}{\sqrt{2}} \\ \dfrac{1}{\sqrt{2}} \end{bmatrix} \\ H\left( \begin{bmatrix} 0 \\ 1 \end{bmatrix} \right) &= \dfrac{1}{\sqrt{2}} \begin{bmatrix} 1 & 1 \\ 1 & -1 \end{bmatrix} \begin{bmatrix} 0 \\ 1 \end{bmatrix} \\ &= \begin{bmatrix} \dfrac{1}{\sqrt{2}} \\ -\dfrac{1}{\sqrt{2}} \end{bmatrix} \end{aligned}

となり、HH ゲートは

0120+1211120121\begin{aligned} \ket{0} &\mapsto \dfrac{1}{\sqrt{2}} \ket{0} + \dfrac{1}{\sqrt{2}} \ket{1} \\ \ket{1} &\mapsto \dfrac{1}{\sqrt{2}} \ket{0} - \dfrac{1}{\sqrt{2}} \ket{1} \end{aligned}

という操作を表すことが分かる。

また、H2=IH^2 = I (II は単位行列) であることから、HH ゲートを2回作用させると元の状態に戻ることが分かる。

Hゲートを2回作用させた例
H2([10])=H([1212])=12[1111][1212]=[10]H2([01])=H([1212])=12[1111][1212]=[01]\begin{aligned} H^2\left( \begin{bmatrix} 1 \\ 0 \end{bmatrix} \right) &= H\left( \begin{bmatrix} \dfrac{1}{\sqrt{2}} \\ \dfrac{1}{\sqrt{2}} \end{bmatrix} \right) \\ &= \dfrac{1}{\sqrt{2}} \begin{bmatrix} 1 & 1 \\ 1 & -1 \end{bmatrix} \begin{bmatrix} \dfrac{1}{\sqrt{2}} \\ \dfrac{1}{\sqrt{2}} \end{bmatrix} \\ &= \begin{bmatrix} 1 \\ 0 \end{bmatrix} \\ H^2\left( \begin{bmatrix} 0 \\ 1 \end{bmatrix} \right) &= H\left( \begin{bmatrix} \dfrac{1}{\sqrt{2}} \\ -\dfrac{1}{\sqrt{2}} \end{bmatrix} \right) \\ &= \dfrac{1}{\sqrt{2}} \begin{bmatrix} 1 & 1 \\ 1 & -1 \end{bmatrix} \begin{bmatrix} \dfrac{1}{\sqrt{2}} \\ -\dfrac{1}{\sqrt{2}} \end{bmatrix} \\ &= \begin{bmatrix} 0 \\ 1 \end{bmatrix} \end{aligned}

テンソル積

2つの量子ビット ψ=α0+β1,ϕ=γ0+δ1\psi = \alpha \ket{0} + \beta \ket{1}, \phi = \gamma \ket{0} + \delta \ket{1} があるとき、これらのテンソル積は

ψϕ\psi \otimes \phi

で表される。

これを計算すると

ψϕ=(α0+β1)(γ0+δ1)=α0γ0+α0δ1+β1γ0+β1δ1=αγ00+αδ01+βγ10+βδ11\begin{aligned} \psi \otimes \phi &= (\alpha \ket{0} + \beta \ket{1}) \otimes (\gamma \ket{0} + \delta \ket {1}) \\ &= \alpha \ket{0} \otimes \gamma \ket{0} + \alpha \ket{0} \otimes \delta \ket{1} + \beta \ket{1} \otimes \gamma \ket{0} + \beta \ket{1} \otimes \delta \ket{1} \\ &= \alpha \gamma \ket{0} \otimes \ket{0} + \alpha \delta \ket{0} \otimes \ket{1} + \beta \gamma \ket{1} \otimes \ket{0} + \beta \delta \ket{1} \otimes \ket{1} \end{aligned}

となる。

また、あるテンソル積 ab\ket{a} \otimes \ket{b}ab\ket{ab} と表すことができる。 (ababaabb の連結) これを用いると

ψϕ=αγ00+αδ01+βγ10+βδ11\psi \otimes \phi = \alpha \gamma \ket{00} + \alpha \delta \ket{01} + \beta \gamma \ket{10} + \beta \delta \ket{11} \\

と表せる。

量子ビット ψϕ\psi \otimes \phi を観測すると、確率 αγ2,αδ2,βγ2,βδ2|\alpha \gamma|^2, |\alpha \delta|^2, |\beta \gamma|^2, |\beta \delta|^2 で状態 00,01,10,11\ket{00}, \ket{01}, \ket{10}, \ket{11} が得られる。

2量子ビットと関数

xx に対する関数 y=f(x)y = f(x) を量子ビットで表現すると

Uf(ab)=abf(a)U_f (\ket{a} \otimes \ket{b}) = \ket{a} \otimes \ket{b \oplus f(a)}

と表せる。

なぜ Vf(a)=f(a)V_f(\ket{a}) = \ket{f(a)} と表現できないのか

詳細は省く (というか私が分かってない) が、このような VfV_f はハードウェアで実装できない。 (ユニタリでない)

f(0)=0,f(1)=1f(0) = 0, f(1) = 1 の場合を考える。

aabbUf(ab)U_f(\ket{a} \otimes \ket{b})
000000\ket{00}
001101\ket{01}
110011\ket{11}
111110\ket{10}

上2行を見ると、f(a)=0f(a) = 0 なので、2ビット目がそのまま bb になっている。 下2行を見ると、f(a)=1f(a) = 1 なので、2ビット目が b1b \oplus 1 (bb の反転) になっている。

f(0)=1,f(1)=1f(0) = 1, f(1) = 1 の場合を考える。

aabbUf(ab)U_f(\ket{a} \otimes \ket{b})
000001\ket{01}
001100\ket{00}
110011\ket{11}
111110\ket{10}

Deutsch アルゴリズム

関数 y=f(x)y = f(x)f(0)=f(1)f(0) = f(1) または f(0)f(1)f(0) \neq f(1) のどちらを満たすかを判定したいとする。

古典計算では、f(0)=f(1)f(0) = f(1)f(0)f(1)f(0) \neq f(1) かを判定するためには、f(0),f(1)f(0), f(1) を計算して比較する必要がある。 量子計算では、Deutsch アルゴリズムを用いることで、この判定を1回の計算で行うことができる。

具体的には

(H1)Uf(HH)01の左の量子ビット={0(f(0)=f(1))1(f(0)f(1))(H \otimes 1) U_f (H \otimes H) \ket{01} \text{の左の量子ビット} = \begin{cases} 0 & (f(0) = f(1)) \\ 1 & (f(0) \neq f(1)) \end{cases}
証明

まず HH01H \otimes H \ket{01} を計算すると

(HH)01=H0H1=(120+121)(120121)=12001201+12101211=12[0(01)+1(01)]\begin{aligned} (H \otimes H) \ket{01} &= H \ket{0} \otimes H \ket{1} \\ &= (\dfrac{1}{\sqrt{2}} \ket{0} + \dfrac{1}{\sqrt{2}} \ket{1}) \otimes (\dfrac{1}{\sqrt{2}} \ket{0} - \dfrac{1}{\sqrt{2}} \ket{1}) \\ &= \dfrac{1}{2} \ket{00} - \dfrac{1}{2} \ket{01} + \dfrac{1}{2} \ket{10} - \dfrac{1}{2} \ket{11} \\ &= \dfrac{1}{2} [ \ket{0} \otimes (\ket{0} - \ket{1}) + \ket{1} \otimes (\ket{0} - \ket{1}) ] \\ \end{aligned}

これに UfU_f を作用させると

Uf(HH)01=Uf(12{0(01)+1(01)})=12{Uf[0(01)]+Uf[1(01)]}=12[0(0f(0)1f(0))+1(0f(1)1f(1))]={12[0(01)+1(01)](f(0)=0)12[0(10)+1(10)](f(0)=1)\begin{aligned} U_f (H \otimes H) \ket{01} &= U_f \left( \dfrac{1}{2} \{ \ket{0} \otimes (\ket{0} - \ket{1}) + \ket{1} \otimes (\ket{0} - \ket{1}) \} \right) \\ &= \dfrac{1}{2} \{ U_f [\ket{0} \otimes (\ket{0} - \ket{1})] + U_f [\ket{1} \otimes (\ket{0} - \ket{1})] \} \\ &= \dfrac{1}{2} [ \ket{0} \otimes ( \ket{0 \oplus f(0)} - \ket{1 \oplus f(0)} ) + \ket{1} \otimes ( \ket{0 \oplus f(1)} - \ket{1 \oplus f(1)} ) ] \\ &= \begin{cases} \dfrac{1}{2} [ \ket{0} \otimes ( \ket{0} - \ket{1} ) + \ket{1} \otimes ( \ket{0} - \ket{1} ) ] & (f(0) = 0) \\ \dfrac{1}{2} [ \ket{0} \otimes ( \ket{1} - \ket{0} ) + \ket{1} \otimes ( \ket{1} - \ket{0} ) ] & (f(0) = 1) \end{cases} \end{aligned}

ここで (1)f(x)={1(f(x)=0)1(f(x)=1)(-1)^{f(x)} = \begin{cases} 1 & (f(x) = 0) \\ -1 & (f(x) = 1) \end{cases} であることを用いると

Uf(HH)01=12[(1)f(0)0(01)+(1)f(1)1(01)]U_f (H \otimes H) \ket{01} = \dfrac{1}{2} [ (-1)^{f(0)} \ket{0} \otimes (\ket{0} - \ket{1}) + (-1)^{f(1)} \ket{1} \otimes (\ket{0} - \ket{1}) ]

これに H1H \otimes 1 を作用させると

(H1)12Uf(HH)01=(H1)12[(1)f(0)0(01)+(1)f(1)1(01)]=122[(1)f(0)(0+1)(01)+(1)f(1)(01)(01)]=122{[(1)f(0)+(1)f(1)]0(01)+[(1)f(0)(1)f(1)]1(01)}\begin{aligned} (H \otimes 1) \dfrac{1}{2} U_f (H \otimes H) \ket{01} &= (H \otimes 1) \dfrac{1}{2} [ (-1)^{f(0)} \ket{0} \otimes (\ket{0} - \ket{1}) + (-1)^{f(1)} \ket{1} \otimes (\ket{0} - \ket{1}) ] \\ &= \dfrac{1}{2 \sqrt{2}} [ (-1)^{f(0)} (\ket{0} + \ket{1}) \otimes (\ket{0} - \ket{1}) + (-1)^{f(1)} (\ket{0} - \ket{1}) \otimes (\ket{0} - \ket{1}) ] \\ &= \dfrac{1}{2 \sqrt{2}} \{ [ (-1)^{f(0)} + (-1)^{f(1)} ] \ket{0} \otimes (\ket{0} - \ket{1}) + [ (-1)^{f(0)} - (-1)^{f(1)} ] \ket{1} \otimes (\ket{0} - \ket{1}) \} \end{aligned}

ここで

(1)f(0)+(1)f(1)={2(1)f(0)(f(0)=f(1))0(f(0)f(1))(1)f(0)(1)f(1)={0(f(0)=f(1))2(1)f(0)(f(0)f(1))\begin{aligned} (-1)^{f(0)} + (-1)^{f(1)} &= \begin{cases} 2 (-1)^{f(0)} & (f(0) = f(1)) \\ 0 & (f(0) \neq f(1)) \end{cases} \\ (-1)^{f(0)} - (-1)^{f(1)} &= \begin{cases} 0 & (f(0) = f(1)) \\ 2 (-1)^{f(0)} & (f(0) \neq f(1)) \end{cases} \end{aligned}

であることを用いると

(H1)Uf(HH)01={12(1)f(0)0(01)(f(0)=f(1))12(1)f(0)1(01)(f(0)f(1))(H \otimes 1) U_f (H \otimes H) \ket{01} = \begin{cases} \dfrac{1}{\sqrt{2}} (-1)^{f(0)} \ket{0} \otimes (\ket{0} - \ket{1}) & (f(0) = f(1)) \\ \dfrac{1}{\sqrt{2}} (-1)^{f(0)} \ket{1} \otimes (\ket{0} - \ket{1}) & (f(0) \neq f(1)) \end{cases}

となり、これを観測すると

左の量子ビット={0(f(0)=f(1))1(f(0)f(1))\text{左の量子ビット} = \begin{cases} 0 & (f(0) = f(1)) \\ 1 & (f(0) \neq f(1)) \end{cases}

となる。