Q# 单元测试检查阶段

Q# unit testing to check phase

我想通过测试量子比特的相位是否翻转来测试相位预言机。 我试着通过

AssertQubitIsInStateWithinTolerance((Complex(0., 0.), Complex(-1., 0.)), qubit, 1e-5);

但它并没有真正检查相位,因为相同的输入也适用于没有相位的测试

AssertQubitIsInStateWithinTolerance((Complex(0., 0.), Complex(1., 0.)), qubit, 1e-5);

有没有办法使用单元测试来检查量子比特(或整个寄存器)的相位?

感谢您的帮助。

没有物理方法可以观察量子态的全局相位,因此您无法区分 |1⟩ 态和 -|1⟩ 态。您需要找到一种方法将此全局相位转换为相对相位,以便您可以观察到它。

  • 如果你想检查一个特定的基础状态|ψ⟩的相位是否被你的oracle翻转,你可以使用相位反冲技巧的修改:准备一个状态(|0⟩+|1⟩)⊗ |ψ⟩,应用你的 oracle 的受控版本(以第一个量子位作为控制),并检查你在第一个量子位上获得的状态:如果它仍然是 |0⟩ + |1⟩,则 oracle 不会翻转状态的相位,如果它变为 |0⟩ - |1⟩,则状态的相位被翻转。 (您可以使用 Measure([PauliX], [q]) 操作进行测量)。
  • 如果你想检查所有的阶段,你可以准备所有基础状态的叠加,应用你的预言并将状态与你期望获得的状态进行比较。您可以通过应用显式控制 Z 门来翻转您知道需要翻转的状态阶段来做到这一点——这应该再次为您提供所有基本状态的叠加。您可以通过将 H 门应用于寄存器的每个量子位并使用 AssertAllZero 操作来检查结果是否为全零状态来检查它是否完成。

您可以查看 Quantum Katas 中的测试工具以获取这些方法的示例;他们测试了许多不同的量子条件,因此它们是测试方法的良好来源。