1

第一个 Q# 代码示例提供了一个方法“Set”,其编写如下(链接)

operation Set (desired: Result, q1: Qubit) : ()
{
    body
    {
        let current = M(q1);
        if (desired != current)
        {
            X(q1);
        }
    }
}

此方法将量子位设置为所需值。为此,测量量子比特值,如果该值与预期不同,则“交换”量子比特状态。

但是在量子物理学中,你不能在不破坏粒子的情况下测量它。这是《量子计算与量子信息》一书的引述:

...测量改变了量子比特的状态,将其从 |0> 和 |1> 的叠加折叠到与测量结果一致的特定状态。例如,如果 |+> 的测量结果为 0,那么量子比特的测量后状态将为 |0>。

但是使用 Q#,您可以测量一个量子比特并继续使用它。

为什么 Q# 语言可以让我们实现现实中不可能的操作?

预先感谢您的回答。

4

1 回答 1

6

我认为回顾一下 Nielsen 和 Chuang 的引用可能会有所帮助:

例如,如果 |+⟩ 的测量结果为 0,那么量子位的测量后状态将为 |0⟩。

也就是说,量子比特不会被测量破坏,但为了让量子力学保持一致,它紧随测量后的状态必须与我们测量的一致(这种一致性要求有时被非正式地称为“坍缩”)。在您的 Q# 示例中,如果我们Zero从对操作的调用中获得 a M,那么我们知道量子位处于 |0⟩ 状态,正如 Nielsen 和 Chuang 所描述的那样。另一方面,如果我们One从对 的调用中得到 a M,我们知道量子比特处于状态 |1⟩ = X |0⟩,因此我们需要应用另一个X回到 |0⟩。(注意:如果你的量子比特存储为光子,那么讨论可能看起来很不同——如果不将光子吸收到材料中,很难测量它。可以使用量子非破坏测量来完成,但这完全是另一个话题。Q # 假设量子比特可以按照你从 Nielsen 和 Chuang 的引述中描述的方式来测量,而不是作为光子吸收来测量。)

以此为背景,Q# 经过精心设计,只允许在实验实践中实现的测量。尽管如此,能够使用经典模拟器以在实际量子设备上不可能的方式探测某些量子位的状态通常非常有帮助。在 Q# 中有两种主要的方法可以做到这一点。首先,您可以使用断言,例如AssertQubit编写单元测试,如果量子位未处于预期状态,则会失败。其次,您可以使用Microsoft.Quantum.Diagnostics命名空间中的函数要求模拟器转储它拥有的诊断信息,例如它使用的状态,代表 Q# 程序使用的量子位。在实际硬件上,诊断信息可能看起来非常不同。

于 2018-08-07T14:14:30.597 回答