Реализовать квантовую телепортацию в qiskit - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь реализовать протокол квантовой телепортации из учебника qiskit в qiskit: я начинаю с q_0 bit = 1 и ожидаю, что q_3 = 1 в конце, но он не работает.

from qiskit import *

qc = QuantumCircuit(3, 3)

qc.x(0) #q -> 1
qc.barrier()

qc.h(1)
qc.cx(1, 2)
qc.barrier()
# Next, apply the teleportation protocol.
qc.cx(0, 1)
qc.h(0)
qc.barrier()
# We measure these qubits and use the classical results to perform an operation
qc.measure(0, 0)
qc.measure(1, 1)
qc.cx(1, 2)
qc.cz(0, 2)
#qc.barrier()
backend = Aer.get_backend('qasm_simulator')
job = execute(qc, backend, shots=1, memory=True).result()
result = job.get_memory()[0]
qc.measure(2, 2)
print(job.get_memory()[0]) #q = 0

1 Ответ

0 голосов
/ 31 марта 2020

Похоже, что работает как задумано. В учебнике к концу ячейки кода написано:

В принципе, если протокол телепортации сработал, мы имеем q [2] = secret_unitary | 0> В результате мы должны быть в состоянии восстановить q [2] = | 0>, применяя обратную переменную secret_unitary, поскольку для унитарного u, u ^ dagger u = I.

У вас был secret_unitary как 'x', который фактически изменяет первый кубит Алисы на 1. Но в конце цепи применяется кинжал secret_unitary, отменяя первоначальное применение secret_unitary. Вы должны ожидать увидеть 0 для q [2], так как это означает, что состояние из q [0] (в данном случае 1) было успешно телепортировано в q [2], а затем возвращено в 0 кинжалом secret_unitary.

...