q回路の主役はCNOT?
このワークシートはMath by Codeの一部です。
論理回路は昔からある。
論理というからには、AND,OR,NOTが重要であることは
回路のことをくわしく知らなくてもわかるでしょう。
論理回路では、情報が左から右へ流れる横線、ワイヤがある。
その途中には、情報を操作、変換するのがゲートがある。
これも、古典でも量子でも同じだ。
しかし、違いもある。
1.q回路の要件は?
<古典回路VS量子回路>
#量子回路で消えたものが2つある。
量子回路、q回路は可逆性が必要なので線の合流点と分岐点が消えた。
横線が結合するFANINと横線が分岐して情報がコピーして流れるFANOUTはない。
#量子論理のワイヤとゲートのルールがはっきりしている。
ワイヤという横線は1qビットか多qビットの状態をつなぐ。
ゲートはユニタリー行列か観測であり、それを横に連結することができる。
<2qビット回路のカギはCNOT>
1qビットのゲートは、X,Y,Z,H,S,Tがあった。
これを連結すると、いろいろ作れるでしょうが、多ビット回路でできることが
1qビット回路ではできない。
多ビット回路の最小版それが2qビット回路だ。
そこではもちろん、1qビットゲートX,Y,Z,H,S,Tが使えるけれど、
大切なのはCNOTだ。
Cは制御、コントロールのCで、NOTは否定のNOTだ。
否定と言えば、X=[(0,1),(1,0)]が、まさに(a,b)⇒(b,a)と入れ替える働きをしていた。
CNOTは2qビットの回路のゲートです。
上のワイヤには制御qビット|C),下のワイヤには標的qビット|T)
と役割を決めて情報を流します。
|0)と|1)の2基底のビットの直積基底は、前回やったように4つできた。(係数は略す。)
|C)⊗|T)=(|0)+|1))⊗(|0)+|1))=|00)+|01)+|10)+|11)
|C)を0が流れたら|T)はそのまま流すが、|C)を1が流れたら|T)は反転して流す。
つまり、
|00)→|00),
|01)→|01),
|10)→|11),
|11)→|10)
となる。
これは、A⊕B=A+B(mod2)と約束すると、驚異的にカンタンになる。
つまり、Cワイヤは|C)→|C)、Tワイヤは|T)→|C⊕T)とかける。
2本まとめてかくと、
CNOT|C, T) =|C, C⊕T)
とかける。
美しい。
<CNOTを4次元化>
ここで、テンソル積、直積を思い出そう。
さらにおもしろいことがわかる。
|0)=(1,0), |1)=(0,1)だったね。
2基底をセットにすると、[(1,0),(0,1)]だね。これは2次元だ。
[(1,0),(0,1)]⊗[(1,0),(0,1)]=I ⊗I=[(1,0,0,0),(0,1,0,0),(0,0,1,0),(0,0,0,1)] で、2×2=4次元だ。
基底も4つできる。それが、|00),|01),|10),|11)のはずだね。
|00)=(1,0,0,0),
|01)=(0,1,0,0),
|10)=(0,0,1,0),
|11)=(0,0,0,1)
と言い換えられる。
すると、CNOTは|00)→|00),|01)→|01),|10)→|11),|11)→|10)の操作は基底の3番と4番の入れ替えをしている
と分かるね。
つまり、CNOT=[(1,0,0,0),(0,1,0,0),(0,0,0,1),(0,0,1,0)]= と綺麗にかけるね。
これで、CNOTのCの効果は視覚化できた。
こうなると、いよいよ、NOTに目を向けることができる。
この行列を2行2列の行列の房に4等分しよう。
[(I ,0),(0,X)]=
になってますね。
予想通り名前通りに、
CNOTは「Xゲートを取り込んだ制御ワイヤつきのNOTゲート」だったんだね。
CNOTゲート

2.CNOTゲートであそぶ
CNOTゲートであそんでみよう。
CNOTは|C, T) →|C, C⊕T)の働きがあった。
これから、CNOTをうまくつないで、いろんなゲートを作ってみよう。
まずは、2ワイヤの値を交換するスワップだ。
つまり、|a,b)→|b,a)だ。
<SWAPを作ろう>
スワップは、CNOTを3個向きを変えながらつなぐだけでつくれてしまう。
SWAPはCNOT3連発

CNOT|C, T) =|C, C⊕T)でした。
上のワイヤをA,下のワイヤをBとすると、
|A, B) →|A, A⊕B)です。これが1番目。
2番目は、下はスルーして、上がターゲットだから、mod2を思い出して単純化すると、
|A, A⊕B)→|A⊕A⊕B, A⊕B)=|B,A⊕B)
3番目は、下がターゲットにもどるから、
|B,A⊕B)→|B,B⊕A⊕B)=|B,A)
このCNOT3連発を1つのゲートとみると、
|A, B) →|B,A)
上下のワイヤのビット交換になってますね。
これを略号として、上下に××をかく流儀がふつうにみられます。
これがSWAPゲートです。
もしも、入力ワイヤを上から順に[上、下]とかくことにしてたら、
SWAP[p,q]=CNOT[p,q]CNOT[q,p]CONT[p,q]
とCNOT3連発の回路図が1行の式でかけるね。
<CNOTゲートを一般化したCUゲート>
CNOTゲートはCワイヤはスルーして、TワイヤでNOTするユニタリー行列Uを使っていた。
だから、CNOT=diag(I, X)という構造化ができたね。
ビットの流れでは|c,t)→|c), X|t)と書くこともできる。
つまりCNOTは、制御Uゲート、CUゲートのU=Xバージョンという風に考えることができる。
すると,Xのかわりに仮にPという名前を使うと、
CP=diag(I,P), |c,t)→|c),P|t)となるでしょう。
ユニタリー行列Uの部分に他の行列Pを入れたゲートをためしてみよう。
(例)
CZ[c,t]=CZ[t,c]
U=Zにするのは同じだけど、ゲートを上にかいても下にかいても同じになる?
CNOTのときは、CNOT|C, T) =|C, C⊕T)でしたね。
CZ[c,t]では|00)→|00),|01)→|01),|10)→|10),|11)→-|11)
|11)→-|11)最後の基底は[c,t]を[t,c]にしても入力も出力も変わらない。
だから、CZ[c,t]=CZ[t,c]
対称性がきれいですね。
(例)
H|0)=1/sqrt(2)(1,1)=1/sqrt(2)(|0) + |1))
H|1)=1/sqrt(2)(1,-1)=1/sqrt(2)(|0) - |1)) だから、
CH=diag(I, H)
CH=[(1,0,0,0),(0,1,0,0),(0,0,1/sqrt(2),1/sqrt(2)),(0,0,1/sqrt(2),-1/sqrt(2))]
c=1でHがtを引き倒す嵐を起こしてます。
<ベル状態を作ろう>
さっき、CUのUにHを入れて、CHを作ってみた。
今度は1ビットゲートの奇人Hと2ビットのマルチプレイヤーCNOTを合体して
H*CNOTを作ってみよう。
アダマール行列Hは、
H|0)=1/sqrt(2)(1,1)=1/sqrt(2)(|0) + |1))
H|1)=1/sqrt(2)(1,-1)=1/sqrt(2)(|0) - |1)) という働きで、赤道になぎ倒す。
その結果を制御ワイヤCにいれて、CNOT|C, T) =|C, C⊕T)
をかけるとどんなゲートになるでしょうか。
Hは標的ワイヤTをスルーするので、
H|C,T)は次の4通りに働くね。
|00)→1/sqrt(2)(|0) + |1))|0)=1/sqrt(2)(|00) + |10))
|01)→1/sqrt(2)(|0) + |1))|1)=1/sqrt(2)(|01) + |11))
|10)→1/sqrt(2)(|0) - |1))|0) =1/sqrt(2)(|00) - |10))
|11)→1/sqrt(2)(|0) - |1))|1) =1/sqrt(2)(|01) - |11))
CNOT|C, T) =|C, C⊕T)これはもともと、|C)が1のときだけ、|T)を反転させるということだった。
だから、4次元の基底にしたあとの|0X)はそのまま、|1X)のXが反転する。
(|00) + |10))→(|00) + |11))
(|01) + |11))→(|01) + |10))
(|00) - |10)) →(|00) - |11))
(|01) - |11)) →(|01) - |10))
となるね。
まとめると、H*CNOT|C, T)は
|00)→1/sqrt(2)(|00) + |11))=|β00)
|01)→1/sqrt(2)(|01) + |10))=|β01)
|10)→1/sqrt(2)(|00) - |11))=|β10)
|11)→1/sqrt(2)(|01) - |10))=|β11)
最後の|βxy)は、|βxy)=1/sqrt(2)(|0y) +(-1)^x |1not(y)))という一般化するための名前ではない。
Bell,Einstein,Podolsky,Rosenの4人が取り上げた、有名な量子もつれ状態だからだ。
いろいろ名前がついているね。
Bell状態、頭文字をとってEPR状態、EPRペアなどなど。
この話題は、CNOTの遊びの延長で出てきた。
しかし、このあとの量子テレポーテーションという話題でも登場するものだ。
遊びなんて失礼したかもね。
