Sdílet prostřednictvím


Rychlý start: Vytvoření prvního Q# programu

Naučte se psát základní Q# program, který demonstruje propletení, klíčový koncept kvantového computingu.

Když jsou dva nebo více qubitů propletené, sdílejí kvantové informace, což znamená, že cokoli se stane s jedním qubitem, se také stane s druhým. V tomto rychlém startu vytvoříte konkrétní dvou qubitový propletený stav s názvem pár Zvonek. Pokud v páru Bell změříte jeden qubit ve $\ket{0}$ stavu, víte, že druhý qubit je také ve $\ket{0}$ stavu bez měření. Další informace najdete v tématu Propletení kvantových dat.

V tomto rychlém startu:

  • Vytvořte soubor Q#.
  • Přidělení páru qubitů
  • Propletení qubitů.

Požadavky

Vytvoření Q# souboru

  1. Otevřete Visual Studio Code.
  2. Vyberte Soubor>nový textový soubor.
  3. Uložte soubor jako Main.qs. Přípona .qs označuje Q# program.

Napsání Q# kódu

Main.qs V souboru postupujte podle těchto kroků k propletení a měření páru qubitů.

Import kvantové knihovny

Sada QDK obsahuje standardní knihovnu Q# s předdefinovanými funkcemi a operacemi pro kvantové programy. Pokud je chcete použít, musíte nejprve importovat příslušnou knihovnu.

V programu použijte příkaz import k otevření Microsoft.Quantum.Diagnostics knihovny. Tím získáte přístup ke všem jeho funkcím a operacím, včetně DumpMachine()toho, které později použijete k zobrazení propleteného stavu.

    import Microsoft.Quantum.Diagnostics.*;

Definování operace

Po importu příslušných knihoven definujte svou kvantovou operaci a její vstupní a výstupní hodnoty. Pro účely tohoto rychlého startu je Mainvaše operace . Tady napíšete zbývající Q# kód pro přidělení, manipulaci s nimi a změříte dva qubity.

Main nepřijímá žádné parametry a vrací dvě Result hodnoty, buď Zero nebo One, které představují výsledky měření qubitu:

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

Přidělení dvou qubitů

Operace Main je aktuálně prázdná, takže dalším krokem je přidělení dvou qubitů q1 a q2. V Q#případě přidělení qubitů pomocí klíčového use slova:

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

Poznámka:

V Q#, qubity jsou vždy přiděleny $\ket{0}$ ve stavu.

Vložení jednoho qubitu do superpozice

Qubity q1 a q2 jsou ve $\ket{0}$ stavu. Chcete-li připravit qubity na propletení, musíte jeden z nich umístit do sudé superpozice, kde má 50% šanci na měření jako $\ket{0}$ nebo $\ket{1}$.

Qubit vložíte do superpozice použitím hadamardu, Hoperace:

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

Výsledný stav q1 je $\frac{{1}{\sqrt{2}}({0}\ket{+\ket{1}),$ což je i superpozice $\ket{0}$ a $\ket{{1}$.

Propletení qubitů

Teď jste připraveni propletit qubity pomocí řízené operace NE, CNOToperace. CNOT je řídicí operace, která přebírá dva qubity, jeden funguje jako ovládací prvek a druhý jako cíl.

Pro účely tohoto rychlého startu nastavíte q1 jako řídicí qubit a q2 cílový qubit. To znamenáCNOT, že překlopí stavq2, kdy je $\ket{1}$stav q1 .

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

Výsledný stav obou qubitů je pár $\frac{Zvonek (\ket{00}+\ket{{11}).${1}{\sqrt{2}}

Tip

Pokud chcete zjistit, jak operace Hadamard a CNOT transformují stav qubitů, přečtěte si téma Vytváření propletení s kvantovými operacemi.

Zobrazení propleteného stavu

Před měřením qubitů je důležité ověřit, že je předchozí kód úspěšně propletl. Operaci, která je součástí Microsoft.Quantum.Diagnostics knihovny, můžete použít DumpMachine k výstupu aktuálního stavu programuQ#:

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

Měření qubitů

Teď, když jste ověřili, že jsou qubity propletené, můžete k měření použít M operaci. Měřeníach q1 q2 Zero One

V Q#, pomocí klíčového let slova deklarovat novou proměnnou. Uložení výsledků q1 měření a q2deklarování proměnných m1 a m2v uvedeném pořadí:

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

Resetování qubitů

Před vydáním na konci každého Q# programu musí být qubity ve $\ket{0}$ stavu. Provedete to pomocí Reset operace:

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

Vrácení výsledků měření

Nakonec dokončete Main operaci a sledujte propletený stav, vraťte výsledky m1 měření a m2:

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

Tip

Pokud chcete získat další informace o Q# funkci nebo operaci, najeďte myší na ni.

Snímek obrazovky s podrobnostmi, které se zobrazí při najetí myší na operaci H v editoru Visual Studio Code

Q# Spuštění kódu

Gratulujeme! Napsali Q# jste program, který propletl dva qubity a vytvořil pár Bell.

Konečný Q# program by měl vypadat takto:

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);
}

Pokud chcete spustit program a zobrazit výsledek obou qubitů, vyberte Spustit nad Main operací nebo stiskněte Ctrl+F5.

Snímek obrazovky se souborem v editoru Q# Visual Studio Code zobrazující, kde najít příkaz Spustit

Program můžete spustit několikrát, z nichž každý má jiný výsledek v konzole ladění. To ukazuje pravděpodobnostní povahu kvantových měření a propletení qubitů.

Pokud je Zerovýsledkem například výsledek, měla by konzola ladění vypadat takto:

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)"

Další krok

Další informace o kvantovém propletení pomocí Q#najdete v kurzu : Prozkoumání kvantového propletení pomocí Q#. Tento kurz rozšiřuje koncepty popsané v tomto rychlém startu a pomáhá psát pokročilejší program propletení.