はじめに
いろんなテキストもあるようですが網羅的なものがなかなかなくて知識がまとまらないのでまとめてみます。
量子ビットに量子ゲートをかけて演算を行う。
量子コンピュータは量子ビットと呼ばれる素子に量子ゲートをかけて操作を行います。量子ビットは通常ベクトルで値が表現され、量子ゲートは行列で表現されます。
状態ベクトル(波動関数、量子状態)
量子ビットは状態ベクトルで値を管理されます。状態ベクトルは1量子ビットは、
∣ψ⟩=α∣0⟩+β∣1⟩=α[10]+β[01]=[αβ]
のようにαとβで管理されます。これらは確率振幅と呼ばれ、
∣α∣2+∣β∣2=1
を満たします。絶対値が付いているのは、これらの状態ベクトルは複素数を取りうるからです。
##複数量子ビットの状態ベクトル
複数量子ビットの状態ベクトルは、テンソル積と呼ばれる計算で状態ベクトルが量子ビット数Nに対して、2Nの状態ベクトルの要素で管理されます。
∣ψ⟩=∣ψ1⟩⊗∣ψ2⟩⊗⋯⊗∣ψn⟩=αβ⋮ω
これらの状態ベクトルは量子ビットのデジタル表記の01の値の組み合わせに対応しており、状態ベクトルを見るとどのビットの組み合わせが出現するのかその確率を把握することができます。
∣00⋯0⟩∣00⋯1⟩⋮∣11⋯1⟩ 量子ゲート操作
上記状態ベクトルが準備できたらいよいよ量子ビットを操作します。量子ビットの操作は実質的に行列演算に相当しますので、行列をかけます。
ゲートは基本のパウリゲート
X=[0110]Y=[0i−i0]Z=[100−1]
こちらはそれぞれ量子ビットの情報の状態を表すブロッホ球と呼ばれる球のXYZ軸周りの180度回転にそれぞれ対応します。
XYZのそれぞれのゲート操作は180度回転に対応しますので、二回使用すると360度回転となり元に戻ります。
XX=YY=ZZ=I
アダマールゲートはZX軸の間の45度で回転し、重ね合わせ状態を作り出したり解除したりできます。
H=21[111−1]
アダマールゲートもZX軸の間45度の軸での回転なので、2回使用すると元に戻ります。
また、うまく軸を変換してあげることによって軸と軸の対応づけができます。
HXH=Z,HYH=−Y,HZH=X
あとは、Z軸周りの回転が使われるRz,S,Tゲート。RzはZ軸周りの任意回転、SはZ軸周りにπ回転。TはZ軸周りに2π回転となります。
Rz=[100eiϕ]S=[100ei2π]=[100i]T=[100ei4π]
ゲート演算は回転に対応していますので、例えばSゲートを二回使うとπ/2を二回回転でπ回転することになり、
S2=[100i][100i]=[100−1]=Z
Tゲートも同様にSやZなどと対応を考えることができます。
任意回転ゲート
上記で出てきたRzゲートはZ軸周りの任意回転を行います。
Rz(ϕ)=[100eiϕ]
こちらを変形したりして別の形でもよく使います。
Rz(ϕ)=e−iϕ/21[e−iϕ/200eiϕ−iϕ/2]=e−iϕ/21[e−iϕ/200eiϕ/2]
行列の外に出ている数字はグローバル位相と呼ばれて回転の計算には影響がないようです。今後勉強したいと思います。
コントロールユニタリーゲート
こちらは条件付きのゲートで2量子ビットにまたがって計算が行われます。コントロールビットとターゲットビットから構成され、コントロールビットが0の時な何も操作せず、コントロールビットが1の時にターゲットビットを操作します。ターゲットビットの操作は、これまで出てきたようなゲート操作が対応します。
行列表記は2*2行列の形で書かれ、
U=1000010000u00u1000u01u11
のようになります。一番有名なのはCX=CNOTゲートで、ユニタリ部分にXゲートが入り、コントロールビットが1の時にターゲットビットを反転させます。
CX=1000010000010010
また、CZゲートは、ターゲットビットにZゲートを適用します。
CZ=100001000010000−1
これらは通常コントロールビットとターゲットビットの関係は、
----*----
|
----U----
のように、上の方のビットをコントロールビットに、下の方のビットをターゲットビットに設定していますし、行列もこの形で書かれますが、上限を反転させる場合には、
----U----
|
----*----
は、
U=10000u000u1000100u010u11
のようになります。ちなみにCZゲートは、ひっくり返しても同じなので、
----*---- ----Z---- ----*----
| = | = |
----Z---- ----*---- ----*----
などと表記されます。コントロールユニタリーゲートは様々なテクニックがあるので必要に応じて勉強したいと思います。
まとめ
とりあえず量子コンピュータの基本的な演算を覚えるためには量子計算を覚える必要があり数学でなりたっています。とりあえず物理が必要ない、行列とブロッホ球の回転くらいを覚える必要があり、その後はアプリケーションに応じて学ぶことがことなりそうです。