Трехстороннее квантовое запутывание с преобразованным Адамаром (суперпозиция) Кубитом

При выполнении следующих операций на 3 кубитах:

H(qubits[0]);
CNOT(qubits[0], qubits[1]);
CNOT(qubits[0], qubits[2]);
CNOT(qubits[1], qubits[2]);

Я получаю эти результаты: кубит 0 находится в суперпозиции кубит 1 такой же, как кубит 0 кубит 2 такой же, как кубит 0 половину времени. например, суперпозиционные значения.

Почему запуск CNOT на кубите 2 с обоими другими кубитами после запуска CNOT на кубите 1 с кубитом 0 приводит к тому, что кубит 2 переходит в состояние суперпозиции между кубитом 0, а не кубитом 0?

2 ответа

Решение

Если вы выполните некоторые математические вычисления, вы обнаружите, что попали в следующее состояние:

|ψ 〉 = (|000〉 + |011〉) / √2

По сути, это суперпозиция между кубитом 0 и запутанными кубитами 1 и 2.

|ψ 〉 = |0〉 ⊗ (|00〉 + |11〉) / √2

Вы можете сделать это с помощью IBM QISKit в Python:

from qiskit import QuantumProgram
from math import sqrt
import numpy as np

qp = QuantumProgram()
cname = '3-qubit'
num_qubits = 3
qr = qp.create_quantum_register('qr', num_qubits)
cr = qp.create_classical_register('cr', num_qubits)
qc = qp.create_circuit(cname, [qr], [cr])

qc.h(qr[0])
qc.cx(qr[0], qr[1])
qc.cx(qr[0], qr[2])
qc.cx(qr[1], qr[2])

qc.measure(qr, cr)

results = qp.execute(cname)
print(results.get_counts(cname))

Это даст вам результат, подобный следующему:

{'000': 530, '011': 494}

Вы также можете явно получить это состояние |ψ〉, взяв унитарную матрицу вашей схемы и применив ее к исходному состоянию |000〉, то есть к вектору [1,0,0,0,0,0,0,0]:

results = qp.execute(cname, backend='local_unitary_simulator', shots=1)
data = results.get_data(cname)
u = np.real(data['unitary'] * sqrt(2.0)).astype(int)
psi = np.zeros(2**num_qubits, dtype=np.int_)
psi[0] = 1
u @ psi

Результат

array([1, 0, 0, 1, 0, 0, 0, 0])

0-я запись - |000〉, 3-я запись - |011〉.

Вы можете увидеть эту квантовую операцию как квантовый побитовый оператор в следующем,

qubits[0]= a
qubits[1] = y
qubits[2] = z 

и пусть @ является побитовым оператором, x@x = 0, любой p@0 = p

qubits[0] = H(a) = x  (superposition state, final x ) 
CNOT(qubits[0], qubits[1]) = CNOT(x,y) = (x, x @ y) = (x, yy)  (final qubits[1]=yy)
CNOT(qubits[0], qubits[2]) = CNOT(x,z) = (x, x @ z) = (x, zz)
CNOT(qubits[1], qubits[2]) = CNOT(yy,zz) = (yy, zz@ yy) = (x@y, x@z@x@y)  = (x@y,z@y) (final qubits[2]=z@y)

(x,y,z) = (0,0,0) ==> (qubits[0],qubits[1],qubits[2]) = (0,0,0)
(x,y,z) = (0,0,1) ==> (qubits[0],qubits[1],qubits[2]) = (0,0,1)
(x,y,z) = (0,1,0) ==> (qubits[0],qubits[1],qubits[2]) = (0,1,1)
(x,y,z) = (0,1,1) ==> (qubits[0],qubits[1],qubits[2]) = (0,1,0)
(x,y,z) = (1,0,0) ==> (qubits[0],qubits[1],qubits[2]) = (1,1,0)
(x,y,z) = (1,0,1) ==> (qubits[0],qubits[1],qubits[2]) = (1,1,1)
(x,y,z) = (1,1,0) ==> (qubits[0],qubits[1],qubits[2]) = (1,0,1)
(x,y,z) = (1,1,1) ==> (qubits[0],qubits[1],qubits[2]) = (1,0,0)
Другие вопросы по тегам