Was sind die Hauptkomponenten eines Q#-Programms?

Abgeschlossen

Bevor Sie mit dem Schreiben von Quantenprogrammen beginnen, ist es wichtig, die Struktur und Komponenten eines Q#-Programms zu verstehen.

In dieser Einheit überprüfen Sie die Hauptkomponenten eines Q#-Programms.

Der Main-Vorgang

Jedes Q#-Programm muss mindestens einen Vorgang enthalten, bei dem es sich in der Regel um den Main-Vorgang handelt. Der Main-Vorgang ist der Einstiegspunkt Ihres Programms. Standardmäßig startet der Q#-Compiler die Ausführung eines Programms über den Main()-Vorgang. Optional können Sie das Attribut @EntryPoint() verwenden, um einen beliebigen Vorgang im Programm als Ausführungspunkt anzugeben.

Der folgende Code definiert beispielsweise einen Einstiegspunktvorgang, MeasureOneQubit:

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

Sie können diesen Code jedoch auch ohne das Attribut @EntryPoint() schreiben, indem Sie den Vorgang MeasureOneQubit() in Main() umbenennen:

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

Typen

Q# bietet viele integrierte Typen, mit denen Sie möglicherweise bereits vertraut sind, einschließlich Int, Double, Bool und String. Q# bietet auch Typen, die spezifisch für Quantencomputing sind, z. B. Qubit und Result.

In diesem Beispiel gibt der Vorgang MeasureOneQubit einen Result-Typ zurück. Der Typ Result ist das Ergebnis der Messung eines Qubits und kann entweder One oder Zero sein.

operation MeasureOneQubit() : Result {
    ...
}

Quantumbibliotheken

Die Q#-Bibliotheken enthalten Funktionen und Vorgänge, die Sie in Quantenprogrammen verwenden können. Wenn Sie eine Funktion oder einen Vorgang aus einer Bibliothek abrufen, verwenden Sie die import-Direktive und geben Sie den Namespace der Bibliothek an. Wenn Sie beispielsweise die Message-Funktion aus dem Microsoft.Quantum.Intrinsic Namespace in der Standard-Quantenbibliothek verwenden möchten, gehen Sie wie folgt vor:

// 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!");

Namespaces in der Standardbibliothek können mithilfe von Std anstelle von Microsoft.Quantum importiert werden. Zum Beispiel:

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

Zuordnen von Qubits

In Q# verwenden Sie das use-Schlüsselwort und den Qubit-Typ, um ein Qubit zuzuweisen. Jedes Qubit, das Sie mit dem Schlüsselwort use zuordnen, beginnt im Zustand „$\ket{0}$“.

Sie können ein oder mehrere Qubits gleichzeitig zuordnen. Hier ist ein Beispiel, das ein und fünf Qubits zuweist:

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

Messen von Qubits

In Q# führt der Measure-Vorgang eine gemeinsame Messung eines oder mehrerer Qubits in den angegebenen Pauli-Basen durch. Diese können PauliX, PauliY oder PauliZ sein. Der Vorgang Measure gibt einen Result-Typ zurück, der entweder One oder Zero ist.

Um eine Messung in der Rechenbasis „$\lbrace\ket{0},\ket{1}\rbrace$“ zu implementieren, können Sie auch den Vorgang M verwenden, der eine Messung in der Pauli Z-Basis durchführt. Daher entspricht der Vorgang M der Anwendung von Measure([PauliZ], [qubit]).

Zurücksetzen von Qubits

In Q# müssen sich Qubits im Zustand „$\ket{0}$“ befinden, wenn sie freigegeben werden. Wenn Sie mit der Verwendung eines Qubits fertig sind, verwenden Sie den Reset-Vorgang, um das Qubit auf „$\ket{0}$“ zurückzusetzen.

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