培训
你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
快速入门:创建第一个 Q# 程序
了解如何编写一个演示纠缠的基本 Q# 程序,这是量子计算的关键概念。
当两个或多个 量子比特 纠缠时,它们共享量子信息,这意味着一个量子比特发生的情况也会发生在另一个量子比特身上。 在本快速入门中,你将创建一个名为 Bell 对的特定双量子位纠缠状态。 在 Bell 对中,如果在状态中
在本快速入门中,请执行以下操作:
- 创建 Q# 文件。
- 分配一对量子比特。
- 纠缠量子比特。
- 最新版本的 Visual Studio Code。
- Azure Quantum 开发工具包 (QDK) 扩展。 有关安装详细信息,请参阅 设置 Quantum 开发工具包。
- 打开 Visual Studio Code。
- 选择“文件>新建文本文件”。
- 将文件另存为
Main.qs
。 .qs 扩展表示 Q# 程序。
Main.qs
在文件中,按照以下步骤纠缠并测量一对量子比特。
QDK 包括 Q# 标准库,其中包含量子程序的预定义函数和操作。 若要使用它们,必须先导入相关库。
在程序中,使用 import
语句打开 Microsoft.Quantum.Diagnostics
库。 这使你可以访问其所有函数和操作,包括 DumpMachine()
稍后用于显示纠缠状态。
import Microsoft.Quantum.Diagnostics.*;
导入相关库后,定义量子操作及其输入和输出值。 在本快速入门中,操作为 Main
. 这是你将编写剩余 Q# 代码来分配、操作和测量两个量子比特的位置。
Main
不采用任何参数并返回两 Result
个值, Zero
或 One
返回表示量子位度量结果的值:
operation Main() : (Result, Result) {
// Your entanglement code goes here.
}
该 Main
操作当前为空,因此下一步是分配两个量子比特, q1
以及 q2
。 在中 Q#,使用 use
关键字分配量子比特:
// Allocate two qubits, q1 and q2, in the 0 state.
use (q1, q2) = (Qubit(), Qubit());
备注
在中 Q#,量子比特始终以
量子比特 q1
并 q2
处于
通过应用 Hadamard, H
操作将量子位置于叠加中:
// Put q1 into an even superposition.
H(q1);
生成的状态q1
为{1}{\sqrt{2}}$\frac{ (\ket{{0}+\ket{1}),
现在,你已准备好使用受控的 NOT 操作 CNOT
纠缠量子比特。 CNOT
是一个控制操作,它采用两个量子比特,一个作为控件,另一个作为目标。
在本快速入门中,你将设置为 q1
控制量子比特和 q2
目标量子比特。 这意味着 CNOT
翻转处于状态时的状态 q2
q1
// 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# :
// Show the entangled state of the qubits.
DumpMachine();
验证量子比特纠缠后,可以使用 M
该操作来测量它们。 测量q1
和q2
折叠其量子状态甚至Zero
One
概率。
在中 Q#,使用 let
关键字声明新变量。 若要存储和 q2
的q1
度量结果,请分别声明变量m1
和m2
:
// Measure q1 and q2 and store the results in m1 and m2.
let (m1, m2) = (M(q1), M(q2));
在每个程序结束时 Q# 发布之前,量子比特必须处于 Reset
操作执行此操作:
// Reset q1 and q2 to the 0 state.
Reset(q1);
Reset(q2);
最后,若要完成Main
操作并观察纠缠状态,请返回度量结果和m1
m2
:
// Return the measurement results.
return (m1, m2);
提示
若要了解有关函数或操作的详细信息 Q# ,请将鼠标悬停在函数或操作上。
祝贺你! 你编写了一个纠缠两个 Q# 量子比特并创建一个 Bell 对的程序。
最终 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
可以多次运行程序,每个程序在调试控制台中都有不同的结果。 这演示了量子测量的概率性质和量子比特的纠缠。
例如,如果结果是 Zero
,调试控制台应如下所示:
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#。 本教程扩展了本快速入门中介绍的概念,并帮助你编写更高级的纠缠程序。