在 qiskit 中实现量子隐形传态

Implement quantum teleportation in qiskit

我正在尝试在 qiskit 中实现 qiskit 教科书中的量子隐形传态协议:
我从 q_0 bit = 1 开始,我希望 q_3 = 1 最后但它不起作用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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

enter 但我不确定这是不是这个原因。


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

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

你的 secret_unitary 是 \\'x\\',这实际上将 Alice\\ 的第一个 qubit 更改为 1。但是,在电路结束时,应用了 secret_unitary 的匕首,取消了原来的secret_unitary 的应用。您应该会看到 q[2] 为 0,因为这意味着来自 q[0](在本例中为 1)的状态已成功传送到 q[2],然后被 q[2] 的匕首带回 0 secret_unitary.