このワークシートは[url=https://www.geogebra.org/m/twxxx3yq]Math by Code[/url]の一部です。[br][br]論理回路は昔からある。[br]論理というからには、[b]AND,OR,NOT[/b]が重要であることは[br]回路のことをくわしく知らなくてもわかるでしょう。[br]論理回路では、[b]情報が左から右へ流れる横線、ワイヤ[/b]がある。[br]その途中には、[b]情報を操作、変換するのがゲートがある。[br][/b]これも、古典でも量子でも同じだ。[br][br]しかし、違いもある。
[br][b][size=150]<古典回路VS量子回路>[br]#量子回路で消えたものが2つある。[br][/size][/b]量子回路、q回路は可逆性が必要なので線の[b]合流点[/b]と[b]分岐点[/b]が消えた。[br]横線が結合するFANINと横線が分岐して情報がコピーして流れるFANOUTはない。[br][br][b]#量子論理のワイヤとゲートのルールがはっきりしている。[br]ワイヤという横線[/b]は[b][color=#0000ff]1qビットか多qビットの状態をつなぐ[/color][/b]。[br][color=#0000ff][b]ゲートはユニタリー行列か観測であり、それを横に連結することができる。[br][/b][/color][br][b][size=150]<2qビット回路のカギはCNOT>[/size][/b][br]1qビットのゲートは、[b]X,Y,Z,H,S,T[/b]があった。[br]これを連結すると、いろいろ作れるでしょうが、多ビット回路でできることが[br]1qビット回路ではできない。[br]多ビット回路の最小版それが2qビット回路だ。[br]そこではもちろん、1qビットゲートX,Y,Z,H,S,Tが使えるけれど、[br]大切なのはCNOTだ。[br][color=#0000ff][b]Cは制御、コントロールのCで、NOTは否定のNOTだ。[/b][br][/color][b]否定[/b]と言えば、X=[(0,1),(1,0)]が、まさに(a,b)⇒(b,a)と入れ替える働きをしていた。[br][br]CNOTは2qビットの回路のゲートです。[br][b]上のワイヤには制御qビット|C),下のワイヤには標的qビット|T)[/b][br]と役割を決めて情報を流します。[br][br]|0)と|1)の2基底のビットの直積基底は、前回やったように4つできた。(係数は略す。)[br][b]|C)⊗|T)=(|0)+|1))⊗(|0)+|1))=|00)+|01)+|10)+|11)[br][/b][br][b]|C)を0が流れたら|T)はそのまま流すが、[/b][b]|C)を1が流れたら|T)は反転して流す。[br][/b][br]つまり、[br][size=150][b]|00)→|00),[br]|01)→|01),[br][color=#0000ff]|10)→|11),[br][/color][/b][b][color=#0000ff]|11)→|10)[br][/color][/b][/size]となる。[br][br]これは、[b]A⊕B=A+B(mod2)[/b]と約束すると、驚異的にカンタンになる。[br]つまり、Cワイヤは|C)→|C)、Tワイヤは|T)→|C⊕T)とかける。[br][br]2本まとめてかくと、[br][b][size=200][color=#0000ff]CNOT|C, T) =|C, C⊕T)[br][/color][/size][/b]とかける。[br]美しい。[br][br][b][size=150]<CNOTを4次元化>[br][/size][/b]ここで、テンソル積、直積を思い出そう。[br]さらにおもしろいことがわかる。[br]|0)=(1,0), |1)=(0,1)だったね。[br]2基底をセットにすると、[(1,0),(0,1)]だね。これは2次元だ。[br][(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次元だ。[br]基底も4つできる。それが、|00),|01),|10),|11)のはずだね。[br][b]|00)=(1,0,0,0),[br]|01)=(0,1,0,0),[br][color=#0000ff]|10)=(0,0,1,0),[br]|11)=(0,0,0,1)[br][/color][/b]と言い換えられる。[br]すると、CNOTは|00)→|00),|01)→|01),|10)→|11),|11)→|10)の操作は基底の3番と4番の入れ替えをしている[br]と分かるね。[br]つまり、[b]CNOT=[/b][b][(1,0,0,0),(0,1,0,0),[color=#0000ff](0,0,0,1),(0,0,1,0)][/color][/b]=[math]\left(\begin{matrix}1,0,0,0\\0,1,0,0\\0,0,0,1\\0,0,1,0\end{matrix}\right)[/math] と綺麗にかけるね。[br]これで、CNOTのCの効果は視覚化できた。[br][br]こうなると、いよいよ、NOTに目を向けることができる。[br]この行列を2行2列の行列の房に4等分しよう。[br][b][(I ,0),(0,X)][/b]=[math]\left(\begin{matrix}I,O\\O,X\end{matrix}\right)[/math][br][br]になってますね。[br]予想通り名前通りに、[br][b]CNOT[/b]は「[b]Xゲートを取り込んだ制御ワイヤつきのNOTゲート」[/b]だったんだね。[br]
[size=150][size=100]CNOTゲートであそんでみよう。[br][br]CNOTは|C, T) →|C, C⊕T)の働きがあった。[br]これから、CNOTをうまくつないで、いろんなゲートを作ってみよう。[br]まずは、2ワイヤの値を交換するスワップだ。[br]つまり、|a,b)→|b,a)だ。[br][/size][b]<SWAPを作ろう>[br][/b][/size]スワップは、CNOTを3個向きを変えながらつなぐだけでつくれてしまう。[br]
CNOT|C, T) =|C, C⊕T)でした。[br]上のワイヤをA,下のワイヤをBとすると、[br]|A, B) →|A, A⊕B)です。これが1番目。[br]2番目は、下はスルーして、上がターゲットだから、mod2を思い出して単純化すると、[br]|A, A⊕B)→|A⊕A⊕B, A⊕B)=|B,A⊕B)[br]3番目は、下がターゲットにもどるから、[br]|B,A⊕B)→|B,B⊕A⊕B)=|B,A)[br]このCNOT3連発を1つのゲートとみると、[br]|A, B) →|B,A)[br]上下のワイヤのビット交換になってますね。[br]これを略号として、上下に××をかく流儀がふつうにみられます。[br]これがSWAPゲートです。[br][br]もしも、入力ワイヤを上から順に[上、下]とかくことにしてたら、[br][b]SWAP[p,q]=CNOT[p,q]CNOT[q,p]CONT[p,q][br][/b]とCNOT3連発の回路図が1行の式でかけるね。[br][br][b][size=150]<CNOTゲートを一般化したCUゲート>[br][/size][/b]CNOTゲートはCワイヤはスルーして、TワイヤでNOTするユニタリー行列Uを使っていた。[br]だから、CNOT=diag(I, X)という構造化ができたね。[br]ビットの流れでは|c,t)→|c), X|t)と書くこともできる。[br]つまりCNOTは、制御Uゲート、CUゲートのU=Xバージョンという風に考えることができる。[br]すると,Xのかわりに仮にPという名前を使うと、[br]CP=diag(I,P), |c,t)→|c),P|t)となるでしょう。[br][br]ユニタリー行列Uの部分に他の行列Pを入れたゲートをためしてみよう。[br][b](例)[/b][br]CZ[c,t]=CZ[t,c][br]U=Zにするのは同じだけど、ゲートを上にかいても下にかいても同じになる?[br]CNOTのときは、CNOT|C, T) =|C, C⊕T)でしたね。[br]CZ[c,t]では|00)→|00),|01)→|01),|10)→|10),|11)→-|11)[br]|11)→-|11)最後の基底は[c,t]を[t,c]にしても入力も出力も変わらない。[br]だから、[b]CZ[c,t]=CZ[t,c][br][/b]対称性がきれいですね。[br][br][b](例)[/b][br]H|0)=1/sqrt(2)(1,1)=1/sqrt(2)(|0) + |1))[br]H|1)=1/sqrt(2)(1,-1)=1/sqrt(2)(|0) - |1)) だから、[br]CH=diag(I, H)[br][b]CH=[(1,0,0,0),(0,1,0,0),[color=#0000ff](0,0,1/sqrt(2),1/sqrt(2)),(0,0,1/sqrt(2),-[color=#0000ff]1/sqrt(2)[/color])][/color][br][/b]c=1でHがtを引き倒す嵐を起こしてます。[br][br][b][size=150]<ベル状態を作ろう>[br][/size][/b]さっき、CUのUにHを入れて、CHを作ってみた。[br]今度は1ビットゲートの奇人Hと2ビットのマルチプレイヤーCNOTを合体して[br]H*CNOTを作ってみよう。[br]アダマール行列Hは、[br]H|0)=1/sqrt(2)(1,1)=1/sqrt(2)(|0) + |1))[br]H|1)=1/sqrt(2)(1,-1)=1/sqrt(2)(|0) - |1)) という働きで、赤道になぎ倒す。[br]その結果を制御ワイヤCにいれて、CNOT|C, T) =|C, C⊕T)[br]をかけるとどんなゲートになるでしょうか。[br]Hは標的ワイヤTをスルーするので、[br]H|C,T)は次の4通りに働くね。[br]|00)→1/sqrt(2)(|0) + |1))|0)=1/sqrt(2)(|00) + [u][b]|1[/b][/u]0))[br]|01)→1/sqrt(2)(|0) + |1))|1)=1/sqrt(2)(|01) + [b][u]|1[/u][/b]1))[br]|10)→1/sqrt(2)(|0) - |1))|0) =1/sqrt(2)(|00) - [b][u]|1[/u][/b]0))[br]|11)→1/sqrt(2)(|0) - |1))|1) =1/sqrt(2)(|01) - [b][u]|1[/u][/b]1))[br]CNOT|C, T) =|C, C⊕T)これはもともと、|C)が1のときだけ、|T)を反転させるということだった。[br]だから、4次元の基底にしたあとの|0X)はそのまま、|1X)のXが反転する。[br](|00) + [u][b]|1[/b][/u]0))→(|00) + [u][b]|11[/b][/u]))[br](|01) + [b][u]|1[/u][/b]1))→(|01) + [b][u]|10[/u][/b]))[br](|00) - [b][u]|1[/u][/b]0)) →(|00) - [b][u]|11[/u][/b]))[br](|01) - [b][u]|1[/u][/b]1)) →(|01) - [b][u]|10[/u][/b]))[br]となるね。[br]まとめると、[b]H*[/b][b]CNOT|C, T)[/b]は[br][b]|00)→1/sqrt(2)(|00) + [/b][u]|11[/u][b]))=|β00)[br]|01)→1/sqrt(2)(|01) + [/b][u]|10[/u][b]))=|β01)[/b][b][br]|10)→1/sqrt(2)(|00) - [/b][u]|11[/u][b]))=|β10)[/b][b][br]|11)→1/sqrt(2)(|01) - [/b][u]|10[/u][b]))=|β11)[br][/b]最後の|βxy)は、|βxy)=1/sqrt(2)(|0y) +(-1)^x [u]|1not(y)[/u]))という一般化するための名前ではない。[br]Bell,Einstein,Podolsky,Rosenの4人が取り上げた、有名な量子もつれ状態だからだ。[br]いろいろ名前がついているね。[br][br][color=#0000ff]Bell状態、頭文字をとってEPR状態、EPRペア[/color]などなど。[br]この話題は、CNOTの遊びの延長で出てきた。[br][br]しかし、このあとの量子テレポーテーションという話題でも登場するものだ。[br]遊びなんて失礼したかもね。[br]