使用英语阅读

通过


你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:创建第一个 Q# 程序

了解如何编写一个演示纠缠的基本 Q# 程序,这是量子计算的关键概念。

当两个或多个 量子比特 纠缠时,它们共享量子信息,这意味着一个量子比特发生的情况也会发生在另一个量子比特身上。 在本快速入门中,你将创建一个名为 Bell 对的特定双量子位纠缠状态。 在 Bell 对中,如果在状态中 |0 测量了一个量子位,则你知道另一个量子位也处于 |0 状态而不测量它。 有关详细信息,请参阅 Quantum 纠缠

在本快速入门中,请执行以下操作:

  • 创建 Q# 文件。
  • 分配一对量子比特。
  • 纠缠量子比特。

先决条件

创建 Q# 文件

  1. 打开 Visual Studio Code。
  2. 选择“文件>新建文本文件”。
  3. 将文件另存为 Main.qs。 .qs 扩展表示 Q# 程序。

Q#编写代码

Main.qs在文件中,按照以下步骤纠缠并测量一对量子比特。

导入量子库

QDK 包括 Q# 标准库,其中包含量子程序的预定义函数和操作。 若要使用它们,必须先导入相关库。

在程序中,使用 import 语句打开 Microsoft.Quantum.Diagnostics 库。 这使你可以访问其所有函数和操作,包括 DumpMachine()稍后用于显示纠缠状态。

Q#
    import Microsoft.Quantum.Diagnostics.*;

定义操作

导入相关库后,定义量子操作及其输入和输出值。 在本快速入门中,操作为 Main. 这是你将编写剩余 Q# 代码来分配、操作和测量两个量子比特的位置。

Main 不采用任何参数并返回两 Result 个值, ZeroOne返回表示量子位度量结果的值:

Q#
    operation Main() : (Result, Result) {
        // Your entanglement code goes here.
}

分配两个量子位

Main 操作当前为空,因此下一步是分配两个量子比特, q1 以及 q2。 在中 Q#,使用 use 关键字分配量子比特:

Q#
        // Allocate two qubits, q1 and q2, in the 0 state.
        use (q1, q2) = (Qubit(), Qubit());

备注

在中 Q#,量子比特始终以 |0 状态分配。

将一个量子位放入叠加

量子比特 q1q2 处于 |0 状态。 若要为纠缠准备量子比特,必须将其中一个量子位置于均匀叠加中,其中 50% 的机会被测量为 |0|1

通过应用 HadamardH操作将量子位置于叠加中:

Q#
        // Put q1 into an even superposition.
        H(q1);

生成的状态q1为{1}{\sqrt{2}}$\frac{ (\ket{{0}+\ket{1}),\ket{0}\ket{{1}$。

纠缠量子比特

现在,你已准备好使用受控的 NOT 操作 CNOT纠缠量子比特。 CNOT 是一个控制操作,它采用两个量子比特,一个作为控件,另一个作为目标。

在本快速入门中,你将设置为 q1 控制量子比特和 q2 目标量子比特。 这意味着 CNOT 翻转处于状态时的状态 q2 q1 |1

Q#
        // Entangle q1 and q2, making q2 depend on q1.
        CNOT(q1, q2);

这两个量子比特的结果状态是 Bell 对 $\frac{{1}{\sqrt{2}}(\ket{00}+\ket{{11})$ 。

提示

如果要了解 Hadamard 和 CNOT 操作如何转换量子比特的状态,请参阅 使用量子运算创建纠缠。

显示纠缠状态

在测量量子比特之前,请务必验证以前的代码是否成功纠缠它们。 可以使用 DumpMachine 该操作(库的 Microsoft.Quantum.Diagnostics 一部分)输出程序的当前状态 Q# :

Q#
        // Show the entangled state of the qubits.
        DumpMachine();

测量量子比特

验证量子比特纠缠后,可以使用 M 该操作来测量它们。 测量q1q2折叠其量子状态甚至ZeroOne概率。

在中 Q#,使用 let 关键字声明新变量。 若要存储和 q2q1度量结果,请分别声明变量m1m2

Q#
        // Measure q1 and q2 and store the results in m1 and m2.
        let (m1, m2) = (M(q1), M(q2));

重置量子比特

在每个程序结束时 Q# 发布之前,量子比特必须处于 |0 状态。 使用 Reset 操作执行此操作:

Q#
        // Reset q1 and q2 to the 0 state.
        Reset(q1);
        Reset(q2);

返回度量结果

最后,若要完成Main操作并观察纠缠状态,请返回度量结果和m1m2

Q#
        // Return the measurement results.
        return (m1, m2);

提示

若要了解有关函数或操作的详细信息 Q# ,请将鼠标悬停在函数或操作上。

将“H”操作悬停在 Visual Studio Code 中时显示的详细信息的屏幕截图。

Q#运行代码

祝贺你! 你编写了一个纠缠两个 Q# 量子比特并创建一个 Bell 对的程序。

最终 Q# 程序应如下所示:

Q#
import Microsoft.Quantum.Diagnostics.*;

operation Main() : (Result, Result) {  
    // Allocate two qubits, q1 and q2, in the 0 state.
    use (q1, q2) = (Qubit(), Qubit());
    
    // Put q1 into an even superposition.
    // It now has a 50% chance of being measured as 0 or 1.
    H(q1);
    
    // Entangle q1 and q2, making q2 depend on q1.
    CNOT(q1, q2);
    
    // Show the entangled state of the qubits.
    DumpMachine();
    
    // Measure q1 and q2 and store the results in m1 and m2.
    let (m1, m2) = (M(q1), M(q2));
    
    // Reset q1 and q2 to the 0 state.
    Reset(q1);
    Reset(q2);
    
    // Return the measurement results.
    return (m1, m2);
}

若要运行程序并查看这两个量子比特的结果,请选择操作上方Main的“运行或按 Ctrl+F5

Q# Visual Studio Code 中文件的屏幕截图,其中显示了“运行”命令的位置。

可以多次运行程序,每个程序在调试控制台中都有不同的结果。 这演示了量子测量的概率性质和量子比特的纠缠。

例如,如果结果是 Zero,调试控制台应如下所示:

Result
DumpMachine:

 Basis | Amplitude      | Probability | Phase
 -----------------------------------------------
  |00⟩ |  0.7071+0.0000𝑖 |    50.0000% |   0.0000
  |11⟩ |  0.7071+0.0000𝑖 |    50.0000% |   0.0000

Result: "(Zero, Zero)"

下一步

若要了解有关量子纠缠 Q#的详细信息,请参阅 教程:使用 探索量子纠缠 Q#。 本教程扩展了本快速入门中介绍的概念,并帮助你编写更高级的纠缠程序。