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ゲート

CNOTゲート

2.CNOTゲートであそぶ

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

SWAPはCNOT3連発

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の遊びの延長で出てきた。 しかし、このあとの量子テレポーテーションという話題でも登場するものだ。 遊びなんて失礼したかもね。
Image