Comment les programmes Q# sont-ils structurés ?
Avant de commencer à écrire des programmes quantiques, il est important de comprendre la structure et les composants d’un programme Q#.
Dans cette unité, vous allez passer en revue les principaux composants d’un programme Q#.
Opération Main
Chaque programme Q# doit contenir au moins une opération, en général l’opération Main
. L’opération Main
est le point d’entrée de votre programme. Par défaut, le compilateur Q# démarre l’exécution d’un programme à partir de l’opération Main()
. Vous pouvez éventuellement utiliser l’attribut @EntryPoint()
pour spécifier n’importe quelle opération dans le programme comme point d’exécution.
Par exemple, le code suivant définit une opération de point d’entrée, MeasureOneQubit
:
@EntryPoint()
operation MeasureOneQubit() : Result {
...
}
Toutefois, vous pouvez également écrire ce code sans l’attribut @EntryPoint()
en renommant l’opération MeasureOneQubit()
en Main()
:
// The Q# compiler automatically detects the Main() operation as the entry point.
operation Main() : Result {
...
}
Types
Q# fournit de nombreux types intégrés avec lesquels vous êtes peut-être déjà familiarisé, notamment Int
, Double
, Bool
et String
. Q# fournit également des types spécifiques à l’informatique quantique, comme Qubit
et Result
.
Dans cet exemple, l’opération MeasureOneQubit
retourne un type Result
. Un type Result
est le résultat de la mesure d’un qubit, et peut être One
ou Zero
.
operation MeasureOneQubit() : Result {
...
}
Bibliothèques quantiques
Les bibliothèques Q# contiennent des fonctions et des opérations que vous pouvez utiliser dans les programmes quantiques. Quand vous appelez une fonction ou une opération à partir d’une bibliothèque, vous utilisez la directive import
, et vous spécifiez l’espace de noms de la bibliothèque. Par exemple, pour utiliser la fonction Message
à partir de l’espace de noms Microsoft.Quantum.Intrinsic
dans la bibliothèque quantique Standard, procédez comme suit :
// 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!");
Vous pouvez importer les espaces de noms de la bibliothèque Standard en utilisant Std
à la place de Microsoft.Quantum
. Par exemple :
// imports all functions and operations from Microsoft.Quantum.Intrinsic == Std.Intrinsic
import Std.Intrinsic.*;
Message("Hello quantum world!");
Allocation de qubits
En Q#, pour allouer un qubit, vous utilisez le mot clé use
et le type Qubit
. Chaque qubit que vous allouez avec le mot clé use
commence à l’état $\ket{0}$.
Vous pouvez allouer un ou plusieurs qubits à la fois. Voici un exemple qui alloue un et cinq qubits :
use q1 = Qubit(); // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits
Mesure des qubits
En Q#, l’opération Measure
effectue une mesure conjointe d’un ou de plusieurs qubits dans les bases de Pauli spécifiées, qui peuvent être PauliX
, PauliY
ou PauliZ
. L’opération Measure
retourne un type Result
, à savoir One
ou Zero
.
Pour implémenter une mesure dans la base de calcul $\lbrace\ket{0},\ket{1}\rbrace$ vous pouvez également utiliser l’opération M
, qui effectue une mesure dans la base Z de Pauli. Ainsi, l’opération M
équivaut à l’application de Measure([PauliZ], [qubit])
.
Réinitialisation de qubits
En Q#, les qubits doivent être à l’état $\ket{0}$ au moment où ils sont libérés. Une fois que vous avez fini d’utiliser un qubit, vous utilisez l’opération Reset
pour réinitialiser le qubit à $\ket{0}$.
// Reset the qubit so it can be safely released.
Reset(qubit);