Jak jsou programy Q# strukturované?

Dokončeno

Než začnete psát kvantové programy, je důležité porozumět struktuře a komponentám programu v jazyce Q#.

V této lekci si projdete hlavní komponenty programu v jazyce Q#.

Operace Main

Každý program Q# musí obsahovat alespoň jednu operaci, což je obvykle Main operace. Operace Main je vstupním bodem programu. Kompilátor Q# ve výchozím nastavení spustí program z Main() operace. Volitelně můžete pomocí atributu @EntryPoint() určit jakoukoli operaci v programu jako bod provádění.

Například následující kód definuje operaci vstupního bodu: MeasureOneQubit

@EntryPoint()
operation MeasureOneQubit() : Result {
    ...
}

Tento kód ale můžete také napsat bez atributu @EntryPoint() tak, že operaci přejmenujete na MeasureOneQubit() Main():

// The Q# compiler automatically detects the Main() operation as the entry point. 
operation Main() : Result {
    ...
}

Typy

Jazyk Q# poskytuje mnoho předdefinovaných typů, se kterými už možná znáte, včetně Int, Double, Boola String. Jazyk Q# také poskytuje typy specifické pro kvantové výpočty, například Qubit a Result.

V tomto příkladu MeasureOneQubit vrátí Result operace typ. Typ Result je výsledkem měření qubitu a může být buď One nebo Zero.

operation MeasureOneQubit() : Result {
    ...
}

Kvantové knihovny

Knihovny Q# obsahují funkce a operace, které můžete použít v kvantových programech. Při volání funkce nebo operace z knihovny použijete direktivu import a určíte obor názvů knihovny. Pokud chcete například použít Message funkci z Microsoft.Quantum.Intrinsic oboru názvů v kvantové knihovně Standard, postupujte takto:

// imports all functions and operations from Microsoft.Quantum.Intrinsic 
import Microsoft.Quantum.Intrinsic.*;
    Message("Hello quantum world!");


// imports just the `Message` function from Microsoft.Quantum.Intrinsic
import Microsoft.Quantum.Intrinsic.Message;
    Message("Hello quantum world!");

Obory názvů v knihovně Standard lze místo Std Microsoft.Quantum. Příklad:

// imports all functions and operations from Microsoft.Quantum.Intrinsic == Std.Intrinsic
import Std.Intrinsic.*;
    Message("Hello quantum world!");

Přidělování qubitů

V Q# k přidělení qubitu use použijete klíčové slovo a Qubit typ. Každý qubit, který přidělíte s klíčovým slovem use , začíná ve stavu $\ket{0}$.

Najednou můžete přidělit jeden nebo více qubitů. Tady je příklad, který přiděluje jeden a pět qubitů:

use q1 = Qubit(); // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits

Měření qubitů

V jazyce Q# Measure operace provádí společné měření jednoho nebo více qubitů v zadaných základech Pauli, které mohou být PauliX, PauliYnebo PauliZ. Operace Measure vrátí Result typ, který je buď One nebo Zero.

K implementaci měření ve výpočetním základu $\lbrace\ket,\ket{0}{1}\rbrace$ můžete také použít M operaci, která provádí měření v základu Pauli Z. Operace M je tedy ekvivalentní použití Measure([PauliZ], [qubit]).

Resetování qubitů

V Q# musí být qubity ve stavu $\ket{0}$ v době jejich uvolnění. Po dokončení použití qubitu Reset použijete operaci k resetování qubitu na $\ket{0}$.

    // Reset the qubit so it can be safely released.
    Reset(qubit);