quantum-computing - 在 qiskit 中实现量子隐形传态
问题描述
我正在尝试在 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
解决方案
看起来它正在按预期工作。在教科书中,它在代码单元的末尾说:
原则上,如果隐形传输协议有效,我们有 q[2] = secret_unitary|0> 因此,我们应该能够通过应用 secret_unitary 的反转来恢复 q[2] = |0>,因为对于单一的 u, u^匕首 u = I。
你有你的secret_unitary
as 'x',这实际上将 Alice 的第一个 qubit 更改为 1。但是,在电路结束时,应用了 secret_unitary 的匕首,取消了secret_unitary
. 您应该会看到 q[2] 为 0,因为这意味着来自 q[0](在本例中为 1)的状态已成功传送到 q[2],然后被 q[2] 的匕首带回 0 secret_unitary
.
推荐阅读
- python - 我们应该使用 time.sleep() 还是 sleep()?
- python-3.x - matplotlib 直方图箱不反映数据
- python - 为什么使用 gspread 会出现无效范围错误
- java - 如何删除 Spring Jpa 和 Intellij Idea 中的数据源警告?
- xcode - Xcode 11 IB UI - 如何将约束分组设置恢复为 Xcode 10 方式
- java - 有没有办法模板抽象方法,以便抽象方法的参数的类型与实现子类相同?
- ruby - 为什么我们需要单独的 openssl.rb 文件?
- python - 同时跟踪多个小部件中的鼠标移动
- python - 在同一循环中的相对路径和绝对路径之间交替
- c# - 如何存储一堆异常并作为 Web API 的响应返回?