回答:
これを行う簡単な方法は、Nielsen&Chuangの図4.10に示されています。
Uは任意の単一キュービット回転(この場合はXゲート)です。
この回路は次のように機能します。すべての制御キュービットのANDが1の場合にのみ、ターゲットキュービットにUを適用します。通常のToffoliは、2キュービットのANDを返します。そのため、いくつかのToffolisを連鎖させると、中間結果を保存するために「作業」(または補助)量子ビットが導入されたというキャッチとともに、c1.c2.c3.c4.c5を取得できます。最終的なCUを適用した後、ターゲットで最終結果を取得します。これで、計算を元に戻し、| 0>状態に戻すことにより、中間作業キュービットをクリーンアップできます。この可逆計算のモデルは、「compute-copy-uncompute」メソッドとして知られており、1973年にCharlie Bennettによって最初に提案されました。
以下は、回路を構築して視覚化するQISKitコードです。
from qiskit import QuantumRegister, QuantumCircuit
n = 5 # must be >= 2
ctrl = QuantumRegister(n, 'ctrl')
anc = QuantumRegister(n-1, 'anc')
tgt = QuantumRegister(1, 'tgt')
circ = QuantumCircuit(ctrl, anc, tgt)
# compute
circ.ccx(ctrl[0], ctrl[1], anc[0])
for i in range(2, n):
circ.ccx(ctrl[i], anc[i-2], anc[i-1])
# copy
circ.cx(anc[n-2], tgt[0])
# uncompute
for i in range(n-1, 1, -1):
circ.ccx(ctrl[i], anc[i-2], anc[i-1])
circ.ccx(ctrl[0], ctrl[1], anc[0])
from qiskit.tools.visualization import circuit_drawer
circuit_drawer(circ)
利回り:
補助量子ビットを使用しないが、単なる制御ではなくゲートよりも複雑なメソッドを追加したい。この方法はBarencoらによって最初に提示されたと思います。等 この論文では、補題7.5:
これは再帰的な定義であるため、コントロールnキュービットゲートはコントロールn-1キュービットゲートに関して定義されます。これは、2つのキュービットゲートCNOTに到達するまで続きます。
この実装は少し難しいですが、相対的なフェーズの収集を気にしない場合は、より単純な実装が存在します(同じ論文の補題7.9を参照)。
などのゲートを実装するにはQISKITでするには、高度なシングルキュービットゲートを使用する必要があります。
QiskitのQuantumCircuitは、複数のモード(基本、基本、ダーティアンシーラ、アドバンスト、ノアンシーラ)でマルチコントロールToffoliゲートを構築するmctメソッドがあります。たとえば、3つの制御キュービットを持つToffoliゲート:
from qiskit import QuantumCircuit, QuantumRegister
controls = QuantumRegister(3, "c_qb")
target = QuantumRegister(1, "t_qb")
circuit = QuantumCircuit(controls, target)
circuit.mct(controls, target[0], None, mode='advanced')
print(circuit)
出力:
c_qb_0: |0>──────■────────■────────────────■──────────────────────────────────■──────────────────────────────────■────────────────────
│ ┌─┴─┐ ┌─┴─┐ │ │
c_qb_1: |0>──────┼──────┤ X ├──────■─────┤ X ├──────■────────■────────────────┼─────────────────■────────────────┼────────────────────
│ └───┘ │ └───┘ │ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐
c_qb_2: |0>──────┼─────────────────┼────────────────┼──────┤ X ├──────■─────┤ X ├──────■──────┤ X ├──────■─────┤ X ├──────■───────────
┌───┐ │-pi/4 ┌───┐┌───┐ │pi/4 ┌───┐┌───┐ │-pi/4 ├───┤┌───┐ │pi/4 ├───┤┌───┐ │-pi/4 ├───┤┌───┐ │pi/4 ├───┤┌───┐ │-pi/4 ┌───┐
t_qb_0: |0>┤ H ├─■──────┤ H ├┤ H ├─■─────┤ H ├┤ H ├─■──────┤ H ├┤ H ├─■─────┤ H ├┤ H ├─■──────┤ H ├┤ H ├─■─────┤ H ├┤ H ├─■──────┤ H ├
└───┘ └───┘└───┘ └───┘└───┘ └───┘└───┘ └───┘└───┘ └───┘└───┘ └───┘└───┘ └───┘