快速入門:建立您的第一個 Q# 程式
瞭解如何撰寫示範糾纏的基本 Q# 程式,這是量子運算的重要概念。
當兩個或多個 量子位糾纏時,它們會共用量子資訊,這表示一個量子位 也會發生另一個量子位的情況。 在本快速入門中,您會建立稱為 Bell 配對的特定雙量子位糾纏狀態。 在 Bell 配對中,如果您測量狀態中的 $\ket{0}$ 一個量子位,則您知道另一個量子位也處於 $\ket{0}$ 狀態,而不需要測量它。 如需詳細資訊,請參閱 量子糾纏。
在本快速入門中,您將:
- 建立 Q# 檔案。
- 配置一組量子位。
- 糾纏量子位。
必要條件
- 最新版的 Visual Studio Code。
- Azure Quantum 開發工具包 (QDK) 延伸模組。 如需安裝詳細數據,請參閱 設定 Quantum Development Kit。
建立 Q# 檔案
- 打開 Visual Studio Code。
- 選取 [檔案>新文本檔]。
- 將檔案儲存為
Main.qs
。 .qs 延伸模組表示程式 Q# 。
撰寫程序 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#,量子位一律會配置在 $\ket{0}$ 狀態中。
將一個量子位放入迭加
量子位 q1
和 q2
處於 $\ket{0}$ 狀態。 若要準備量子位進行糾纏,您必須將其中一個放入平均迭加中,其中 50% 的機會被測量為 $\ket{0}$ 或 $\ket{1}$。
您可以套用 Hadamard、 H
作業,將量子位放入迭加:
// Put q1 into an even superposition.
H(q1);
產生的狀態q1
為{1}{\sqrt{2}}$\frac{ (\ket{{0}+\ket{1})$,這是 和{1}$$\ket{ 的偶迭加。$\ket{0}$
糾纏量子位
您現在已準備好使用 controlled-NOT、 CNOT
作業來糾纏量子位。 CNOT
是一個控制作業,採用兩個量子位,一個做為控件,另一個作為目標。
在本快速入門中,您會將 設定 q1
為控件量子位和 q2
目標量子位。 這表示CNOT
當 的狀態為 $\ket{1}$時,會翻轉 的狀態q1
q2
。
// 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
折疊其量子狀態,甚至One
Zero
機率。
在 中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# 發行之前,量子位必須處於 $\ket{0}$ 狀態。 您可以使用作業來執行此 Reset
動作:
// Reset q1 and q2 to the 0 state.
Reset(q1);
Reset(q2);
傳回度量結果
最後,若要完成Main
作業並觀察糾纏狀態,請傳回 和 m2
的m1
度量結果:
// Return the measurement results.
return (m1, m2);
提示
如果您想要深入瞭解函 Q# 式或作業,請將滑鼠停留在函式或作業上。
執行您的程序 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#探索量子糾纏。 本教學課程會擴充本快速入門中涵蓋的概念,並協助您撰寫更進階的糾纏程式。