共用方式為


快速入門:建立您的第一個 Q# 程式

瞭解如何撰寫示範糾纏的基本 Q# 程式,這是量子運算的重要概念。

當兩個或多個 量子位糾纏時,它們會共用量子資訊,這表示一個量子位 也會發生另一個量子位的情況。 在本快速入門中,您會建立稱為 Bell 配對的特定雙量子位糾纏狀態。 在 Bell 配對中,如果您測量狀態中的 $\ket{0}$ 一個量子位,則您知道另一個量子位也處於 $\ket{0}$ 狀態,而不需要測量它。 如需詳細資訊,請參閱 量子糾纏

在本快速入門中,您將:

  • 建立 Q# 檔案。
  • 配置一組量子位。
  • 糾纏量子位。

必要條件

建立 Q# 檔案

  1. 打開 Visual Studio Code。
  2. 選取 [檔案>新文本檔]。
  3. 將檔案儲存為 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}$ 狀態中。

將一個量子位放入迭加

量子位 q1q2 處於 $\ket{0}$ 狀態。 若要準備量子位進行糾纏,您必須將其中一個放入平均迭加中,其中 50% 的機會被測量為 $\ket{0}$ 或 $\ket{1}$。

您可以套用 HadamardH作業,將量子位放入迭加:

        // 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}$時,會翻轉 的狀態q1q2

        // 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 作業來測量它們。 測量q1q2折疊其量子狀態,甚至OneZero機率。

在 中Q#let,您會使用 關鍵詞來宣告新的變數。 若要儲存和 q2q1度量結果,請分別宣告變數m1m2

        // 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作業並觀察糾纏狀態,請傳回 和 m2m1度量結果:

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

提示

如果您想要深入瞭解函 Q# 式或作業,請將滑鼠停留在函式或作業上。

當您將 『H』 作業暫留在 Visual Studio Code 中時所顯示詳細資料的螢幕快照。

執行您的程序 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

Visual Studio Code 中檔案的 Q# 螢幕快照,其中顯示尋找 [執行] 命令的位置。

您可以在偵錯控制台中以不同的結果執行程式數次。 這示範量子測量的概率本質和量子位的糾纏。

例如,如果結果為 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#探索量子糾纏。 本教學課程會擴充本快速入門中涵蓋的概念,並協助您撰寫更進階的糾纏程式。