【问题标题】:Q# unit testing to check phaseQ# 单元测试检查阶段
【发布时间】:2020-11-15 17:41:01
【问题描述】:

我想通过测试 qubit 的相位是否翻转来测试相位预言。 我试图做到这一点

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

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

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

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

感谢您的帮助。

【问题讨论】:

    标签: unit-testing quantum-computing q#


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-11-03
      • 2011-02-24
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-10
      • 2017-02-16
      相关资源
      最近更新 更多