第一个Q#代码示例提供了一个方法"Set“,编写如下(链接)
operation Set (desired: Result, q1: Qubit) : ()
{
body
{
let current = M(q1);
if (desired != current)
{
X(q1);
}
}
}此方法将量子位设置为所需的值。要做到这一点,就需要测量量子位值,如果该值与预期值不同,则量子位状态被“交换”。
但是在量子物理学中,你不能测量一个粒子而不破坏它。以下是“量子计算和量子信息”一书的引文:
..。测量改变了量子位元的状态,使其从|0>和|1>的叠加变为与测量结果一致的特定状态。例如,如果|+>的度量为0,那么量子位的后测量状态将是|0>。
但是使用Q#,您可以度量一个量子位并继续使用它。
为什么Q#语言允许我们实现在现实中不可能的操作?
预先感谢您的回答。
发布于 2018-08-07 14:14:30
我认为回顾一下你从尼尔森和庄家那里引用的话可能会有所帮助:
例如,如果|+⟩的测量值为0,那么量子位的测量后状态将是\0⟩。
也就是说,量子位元不被测量所破坏,但为了使量子力学一致,它在测量后的状态必须与我们测量的结果一致(这种一致性要求有时被非正式地称为“崩溃”)。在您的Q#示例中,如果我们从对M操作的调用中得到一个M,那么我们就会知道qubit正处于{##**$$}0⟩状态,正如Nielsen和Chuang所描述的那样。另一方面,如果我们从对One的调用中得到一个M,我们就会知道这个量子位元是处于状态\1⟩=X_x_0⟩的状态,所以我们需要应用另一个X门才能返回回__0⟩。(注意:如果你的量子位元是以光子的形式储存的,那么讨论可能会看起来很不一样-如果不把光子吸收到物质中,就很难测量光子。)这可以用量子非破坏性测量来完成,但这完全是另一个话题。Q#假设量子位元可以用你引用的尼尔森和庄氏描述的方式来测量,而不是用光子吸收来测量。)
在此背景下,Q#被精心设计成只允许在实验实践中实现的测量。尽管如此,能够使用经典模拟器以一种在实际量子设备上不可能的方式探测一些量子位元的状态通常是非常有帮助的。在Q#中,有两种主要的方法可以做到这一点。首先,您可以使用像AssertQubit这样的断言来编写单元测试,如果qubit没有处于预期的状态,这些测试就会失败。其次,您可以使用命名空间中的函数来要求模拟器转储它拥有的诊断信息,例如它使用的状态表示Q#程序使用的量子位。在实际硬件上,诊断信息可能看起来非常不同。
https://stackoverflow.com/questions/51722954
复制相似问题