在qiskit中实现量子隐形传态

Implement quantum teleportation in qiskit

我正在尝试在 qiskit 中实现 qiskit 教科书中的 quantum teleportation protocol: 我从 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

看起来它正在按预期工作。在教科书中,它在代码单元的末尾说:

原则上,如果传送协议有效,我们有 q[2] = secret_unitary|0> 因此,我们应该能够通过应用 secret_unitary 的反向来恢复 q[2] = |0> 因为对于单一的 u,u^dagger u = I.

你的 secret_unitary 为 'x',这实际上将 Alice 的第一个量子位更改为 1。但是,在电路的末端,secret_unitary 的匕首是已申请,取消 secret_unitary 的原始申请。您应该期望看到 q[2] 为 0,因为这意味着来自 q[0] 的状态(在本例中为 1)已成功传送到 q[2],然后被secret_unitary.

根据你的代码,我得到了电路。我认为不能得到 q_3 的原因是正确的。就是“Qubit measurement is followed by instructions”。测量完之后就不能再操作了。 但是我不确定是不是这个原因。