如何在Cirq电路中采用经典输入

时间:2019-03-10 21:15:38

标签: python quantum-computing

我是量子计算的新手,在阅读Nielsen和Chuang的量子计算和量子信息时,我一直在玩Cirq。本文中最有趣的电路之一与量子隐形传态有关,我正在尝试在Cirq中实现它。按照上述步骤构造EPR对和大部分电路非常简单。

但是,鲍勃需要根据爱丽丝的EPR量子位和她的其他量子位(在本文中标记为ψ)的测量结果来“修正”他的EPR量子位。对我来说,尚不清楚将测量中的经典位合并到电路中的最佳方法。

到目前为止,我所做的是在不进行修复的情况下构建电路,运行仿真,然后根据测得的值附加适当的X和/或Z门。代码看起来像

import cirq

psi_qubit = cirq.GridQubit(0, 0)
epr_alice = cirq.GridQubit(0, 1)
epr_bob = cirq.GridQubit(0, 2)

circuit = cirq.Circuit()

# Generate the EPR pair
circuit.append(
    [
        cirq.H(epr_alice),
        cirq.CNOT(epr_alice, epr_bob)
    ]
)

# Create the teleporation circuit without the fix up on Bob's EPR pair
circuit.append(
    [
        cirq.CNOT(psi_qubit, epr_alice),
        cirq.H(psi_qubit),
        cirq.measure(psi_qubit, epr_alice)
    ]
)

simulator = cirq.Simulator()
result = simulator.run(circuit)

measurement = result.measurements[f"{psi_qubit},{epr_alice}"][0]

if measurement[1]:
    circuit.append([cirq.X(epr_bob)])
if measurement[0]:
    circuit.append([cirq.Z(epr_bob)])
circuit.append(cirq.measure(epr_bob))

print(circuit)

印刷电路看起来像

(0, 0): ───────────@───H───M───────────
                   │       │
(0, 1): ───H───@───X───────M───────────
               │
(0, 2): ───────X───────────────Z───M───

在爱丽丝的EPR量子比特度量|0>和她的其他量子比特度量|1>的情况下,尽管该电路与文本中的内容一致,但不能保证在完整电路上再次运行仿真对Alice的量子位进行相同的测量,因此修复部分将不正确。

将测量值反馈回电路的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

Cirq刻意不具备此功能,因为大多数硬件都不具备此功能,并且Cirq的设计目标之一是由硬件功能来驱动。

您可以通过插入CNOT和CZ操作对其测量的量子位进行控制来解决遗漏,只需假装它们是经典控制的。