トッフォリ/CCNOTゲートトッフォリ/CCNOTゲート
定義
以下のようなベクトル値ブール関数をトフォリゲートToffoli gateと呼ぶ。
T:{0,1}3→{0,1}3
T(a,b,c)=(a,b,(a∧b)⊕c)
- CCNOT ゲートControlled Controlled NOT(CCNOT) gateとも呼ばれる。
説明
トフォリゲートでは、最初の二つの入力が両方とも1であれば、三番目の入力が反転する。その他の場合は、入力と出力が同じである。具体的な計算は以下の通りである。
T(0,0,0)T(0,0,1)T(0,1,0)T(0,1,1)T(1,0,0)T(1,0,1)T(1,1,0)T(1,1,1)=(0,0,(0∧0)⊕0)=(0,0,0⊕0)=(0,0,0)=(0,0,(0∧0)⊕1)=(0,0,0⊕1)=(0,0,1)=(0,1,(0∧1)⊕0)=(0,1,0⊕0)=(0,1,0)=(0,1,(0∧1)⊕1)=(0,1,0⊕1)=(0,1,1)=(1,0,(1∧0)⊕0)=(1,0,0⊕0)=(1,0,0)=(1,0,(1∧0)⊕1)=(1,0,0⊕1)=(1,0,1)=(1,1,(1∧1)⊕0)=(1,1,1⊕0)=(1,1,1)=(1,1,(1∧1)⊕1)=(1,1,1⊕1)=(1,1,0)
上の表を見ればTが可逆関数であることとTを二回合成すると恒等関数になることが容易に分かる。
Id=T∘T
また、{T}が機能的に完全であるため、Tは汎用ゲートである。
부울 함수 | 기호 | 진리표 |
T |  | 입력 | 출력 | a | b | c | a | b | (a∧b)⊕c | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
|
整理
(射影と注入を制約なく使えると仮定すると)トフォリゲートTは汎用ゲートである。つまり{T}は機能的に完全である。
証明
定理
複製関数を許可すると、{↑}は機能的に完全である。つまりNANDゲート↑は汎用ゲートである。
上の定理に従い、射影、注入、Tを適切に使用して複製関数clとNANDゲートを表現できることを示せば証明が完了する。
複製関数
cl=p1∘T∘2∘1
が成り立つ。まずT∘2∘1(a)を計算すると以下のようになる。
T∘2∘1(a)=T∘2(a,1)=T(a,1,0)
ここでa=1であればT(1,1,0)=(1,1,1)であり、a=0であればT(0,1,0)=(0,1,0)であるため、次が成り立つ。
T(a,1,0)=(a,1,a)
したがってp1を取れば、
p1∘T∘2∘1(a)=p1(a,1,a)=(a,a)=cl(a)
NANDゲート
p0∘p1∘T∘2=↑p0∘p1∘T∘2(a,b)=a↑b
が成り立つ。順に計算すると以下のようになる。
p0∘p1∘T∘2(a,b)=p0∘p1∘T(a,b,1)=p0∘p1(a,b,(a∧b)⊕1)=p0(a,(a∧b)⊕1)=(a∧b)⊕1=¬(a∧b)=a↑b
最後の行はXORゲートの性質によって成り立つ。
■