量子計算についてのメモ


量子計算についてのメモ

2019_02_12 @suharahiromichi

$$
\def\bra#1{\mathinner{\left\langle{#1}\right|}}
\def\ket#1{\mathinner{\left|{#1}\right\rangle}}
\def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}}
$$

はじめに

1qubitのデータは、2次元の縦ベクトル、1階のテンソルで表現される。
1qubitに作用する演算子は、2x2の行列、2階のテンソルで表現される。

a
=
\ket{\phi}
=
a_0\ket{0} + a_1\ket{1}
=
\begin{pmatrix}
a_0 \\
a_1
\end{pmatrix}
A
=
\begin{pmatrix}
A_{00} & A_{01} \\
A_{10} & A_{11}
\end{pmatrix}

データへの演算子の作用は、行列と縦ベクトルの積である。

A \ a

クロネッカー積

2qubitのデータ、および、その演算子はそれぞれのテンソル積で得られる。線型写像のテンソル積はクロネッカー積で与えられる。これは、データはn次の縦ベクトル、演算子はnxnの行列で表現され、「フラットな表現」と呼ばれることもある。

qubit テンソル 縦ベクトル  例
1 1階 2次   a
2 2階 4次   a ⊗ b
3 3階 8次   a ⊗ b ⊗ c
4 4階 16次   a ⊗ b ⊗ c ⊗ d
n n階 (2^n)次  
qubit演算子 テンソル 行列  例
1 2階 2x2   A
2 4階 4x4   A ⊗ B
3 8階 8x8   A ⊗ B ⊗ C
4 16階 16x16   A ⊗ B ⊗ C ⊗ D
n 2^n階 (2^n)x(2^n)  

クロネッカー積は、右側掛けるほうがマイナーに回ることに留意する。

qubit (量子ビット)

a \otimes b
=
\begin{pmatrix}
a_0 \\
a_1
\end{pmatrix}
\otimes
\begin{pmatrix}
b_0 \\
b_1
\end{pmatrix}
=
\begin{pmatrix}
a_0
\begin{pmatrix}
b_0 \\
b_1
\end{pmatrix}
\\
a_1
\begin{pmatrix}
b_0 \\
b_1
\end{pmatrix}
\end{pmatrix}
=
\begin{pmatrix}
a_0 b_0 \\
a_0 b_1 \\
a_1 b_0 \\
a_1 b_1 \\
\end{pmatrix}

要素毎に書くと、

w_{(ij)} = a_i b_j

\\

w_{(ijk)} = a_i b_j c_k

ここで (ij) は、2進数である。別な書き方では、

w_{x} = a_{(x/2)} b_{(x\ mod\ 2)}

演算子

A B
=
\begin{pmatrix}
A_{00} & A_{01} \\
A_{10} & A_{11}
\end{pmatrix}
\otimes
\begin{pmatrix}
B_{00} & B_{01} \\
B_{10} & B_{11}
\end{pmatrix}
=
\begin{pmatrix}
A_{00} (B) & A_{01} (B) \\
A_{10} (B) & A_{11} (B)
\end{pmatrix}
\\ =
\begin{pmatrix}
A_{00} B_{00} & A_{00} B_{01} & A_{01} B_{00} & A_{01} B_{01} \\
A_{00} B_{10} & A_{00} B_{11} & A_{01} B_{10} & A_{01} B_{11} \\
A_{10} B_{00} & A_{10} B_{01} & A_{11} B_{00} & A_{11} B_{01} \\
A_{10} B_{10} & A_{10} B_{11} & A_{11} B_{10} & A_{11} B_{11}\\
\end{pmatrix}

要素毎に書くと、

T_{(ij)(nm)} = A_{in} B_{jm}
\\
T_{(ijk)(nml)} = A_{in} B_{jm} C_{kl}
\\

ここで (ij) は、2進数である。別な書き方では、

T_{xy} = A_{(x/2)(y/2)} B_{(x\ mod\ 2)(y\ mod\ 2)}

内積

随伴行列、adjoint matrix、またはエルミート転置 (エルミート行列ではない)

\ket{\phi}^\dagger
=
\bra{\phi}
=
(a_0\ket{0})^\dagger + (a_1\ket{1})^\dagger
=
a_0^*\bra{0} + a_1^*\bra{1}

ここで、<0|と<1|はブラと読む。a*は複素共役。

\braket{\phi}{\psi}
=
\bra{\phi} \ket{\psi}
=
\begin{pmatrix}
a_0^* & a_1^*
\end{pmatrix}
\begin{pmatrix}
b_0 \\
b_1
\end{pmatrix}
=
a_0^* b_0 + a_1^* b_1

便利な公式

その1

(\ket{a} \otimes \ket{b})(\ket{c} \otimes \ket{d})
=
\braket{a}{c} \braket{b}{d}
\\
\\
\\
(=
a_0 b_0 c_0 d_0 +
a_0 b_1 c_0 d_1 +
a_1 b_0 c_1 d_0 +
a_1 b_1 c_1 d_1
)

その2

この式は、量子回路における信号の独立性を表している。

(A \otimes B) (\ket{a} \otimes \ket{b})
=
A \ket{a} \otimes B \ket{b}
(=
\begin{pmatrix}
A_{00} B_{00} a_0 b_0 + A_{00} B_{01} a_0 b_1 + A_{01} B_{00} a_1 b_0 + A_{01} B_{01} a_1 b_1 \\
A_{00} B_{10} a_0 b_0 + A_{00} B_{11} a_0 b_1 + A_{01} B_{10} a_1 b_0 + A_{01} B_{11} a_1 b_1 \\
A_{10} B_{00} a_0 b_0 + A_{10} B_{01} a_0 b_1 + A_{11} B_{00} a_1 b_0 + A_{11} B_{01} a_1 b_1 \\
A_{10} B_{10} a_0 b_0 + A_{10} B_{11} a_0 b_1 + A_{11} B_{10} a_1 b_0 + A_{11} B_{11} a_1 b_1 \\
\end{pmatrix}
)

swap (量子ビットの入れ替え)

swap
=
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 0 & 1 \\
\end{pmatrix}

をつかう。

2量子ビットの場合

swap \cdot (a \otimes b)
=
swap \cdot 
\begin{pmatrix}
a_0 b_0 \\
a_0 b_1 \\
a_1 b_0 \\
a_1 b_1 \\
\end{pmatrix}
=
\begin{pmatrix}
a_0 b_0 \\
a_1 b_0 \\
a_0 b_1 \\
a_1 b_1 \\
\end{pmatrix}
=
b \otimes a

3量子ビットの場合

(swap \otimes I) (a \otimes b \otimes c)
=
(swap \cdot (a \otimes b)) \otimes c
=
b \otimes a \otimes c
(I \otimes swap) (a \otimes b \otimes c)
=
a \otimes (swap \cdot (b \otimes c))
=
a \otimes c \otimes b

別のswapの場合は、これらを組み合わせて、

\begin{eqnarray}
&&
(I \otimes swap)(swap \otimes I)(I \otimes swap)(a \otimes b \otimes c)
\\ &=&
(I \otimes swap)(swap \otimes I)(a \otimes c \otimes b)
\\ &=&
(I \otimes swap)(c \otimes a \otimes b)
\\ &=&
(c \otimes b \otimes a)
\end{eqnarray}

より一般的に、

swap3(p, q, r) = (I \otimes swap)^p (swap \otimes I)^q  (I \otimes swap)^r

ここで、p, q, r は 0または1。

逆変換は、

swap = swap^{-1}

なので、

swap3(p, q, r)^{-1} = swap3(r, q, p)

4量子ビットの場合

(swap \otimes I \otimes I)(a \otimes b \otimes c \otimes d)
=
(swap \cdot (a \otimes b)) \otimes c \otimes d
=
b \otimes a \otimes c \otimes d
(I \otimes swap \otimes I)(a \otimes b \otimes c \otimes d)
=
a \otimes (swap \cdot (b \otimes c)) \otimes d
=
a \otimes c \otimes b \otimes d

補足

\ket{00} =
\ket{0} \otimes \ket{0} =
\ket{0} \bra{0} =
\begin{pmatrix}
1 \\ 0
\end{pmatrix}
\begin{pmatrix}
1 & 0
\end{pmatrix}
=
\begin{pmatrix}
1 & 0 \\
0 & 0
\end{pmatrix}
=
\begin{pmatrix}
1 \\ 0 \\
0 \\ 0
\end{pmatrix}
\ket{01} =
\ket{0} \otimes \ket{1} =
\ket{0} \bra{1} =
\begin{pmatrix}
1 \\ 0
\end{pmatrix}
\begin{pmatrix}
0 & 1
\end{pmatrix}
=
\begin{pmatrix}
0 & 1 \\
0 & 0
\end{pmatrix}
=
\begin{pmatrix}
0 \\ 1 \\
0 \\ 0
\end{pmatrix}
\ket{10} =
\ket{1} \otimes \ket{0} =
\ket{1} \bra{0} =
\begin{pmatrix}
0 \\ 1
\end{pmatrix}
\begin{pmatrix}
1 & 0
\end{pmatrix}
=
\begin{pmatrix}
0 & 0 \\
1 & 0
\end{pmatrix}
=
\begin{pmatrix}
0 \\ 0 \\
1 \\ 0
\end{pmatrix}
\ket{11} =
\ket{1} \otimes \ket{1} =
\ket{1} \bra{1} =
\begin{pmatrix}
0 \\ 1
\end{pmatrix}
\begin{pmatrix}
0 & 1
\end{pmatrix}
=
\begin{pmatrix}
0 & 0 \\
0 & 1
\end{pmatrix}
=
\begin{pmatrix}
0 \\ 0 \\
0 \\ 1
\end{pmatrix}

以上