Types de données propres au domaine quantique

Cette rubrique décrit le type Qubit, ainsi que deux autres types qui sont en quelque sorte spécifiques au domaine quantique : Pauli et Result.

Qubit

Q# traite les qubits comme des éléments opaques qui peuvent être transmis aux fonctions et opérations, mais sur lesquels il est possible d’interagir uniquement en les transmettant aux instructions natives du processeur quantique ciblé. Ces instructions sont toujours définies sous forme d’opérations, car leur intention est de modifier l’état quantique. La restriction qui empêche les fonctions de modifier l’état quantique, alors même que les qubits peuvent être transmis en tant qu’arguments d’entrée, est appliquée par l’exigence selon laquelle les fonctions peuvent uniquement appeler d’autres fonctions et pas d’opérations.

Les bibliothèques Q# sont compilées par rapport à un ensemble standard d’opérations intrinsèques, c’est-à-dire des opérations qui n’ont pas de définition pour leur implémentation dans le langage. Pendant le ciblage, les implémentations qui les expriment en termes d’instructions natives de la cible d’exécution sont reliées par le compilateur. Un programme Q# combine alors ces opérations définies par une machine cible pour créer des opérations de haut niveau qui expriment le calcul quantique. De cette façon, Q# permet d’exprimer très facilement la logique sous-jacente des algorithmes quantiques et hybrides quantiques-classiques, tout en restant très général quant à la structure d’une machine cible ou et sa réalisation de l’état quantique.

Dans Q# à proprement dit, il n’y a pas de type ni de construction en Q# qui représente l’état quantique. À la place, un qubit représente la plus petite unité physique traitable dans un ordinateur quantique. Par conséquent, un qubit est un élément avec une durée de vie longue et Q# n’a donc pas besoin de types linéaires. Ainsi, nous ne référençons pas explicitement l’état dans Q#, mais décrivons plutôt comment l’état est transformé par le programme, par exemple, via l’application d’opérations telles que X et H. De la même façon qu’un programme d’ombrage graphique ajoute une description des transformations à chaque sommet, un programme quantique en Q# ajoute des transformations aux états quantiques, représentées sous forme de références entièrement opaques à la structure interne d’une machine cible.

Un programme Q# n’a pas la possibilité de pratiquer une introspection dans l’état d’un qubit. Il est donc entièrement agnostique quant à la nature de l’état quantique ou à la façon dont il est réalisé. À la place, un programme peut appeler des opérations comme Measure pour obtenir des informations sur l’état quantique du calcul.

Pauli

Les valeurs de type Pauli spécifient un opérateur Pauli à un seul qubit. Les possibilités sont PauliI, PauliX, PauliY et PauliZ. Les valeurs Pauli sont principalement utilisées pour spécifier la base d’une mesure quantique.

Résultats

Le type Result spécifie le résultat d’une mesure quantique. Q# met en miroir la plupart du matériel quantique en fournissant des mesures dans les produits des opérateurs Pauli à un seul qubit : un Result égal à Zero indique que la valeur propre +1 a été mesurée, et un Result égal à One indique que la valeur propre -1 a été mesurée. Autrement dit, Q# représente les valeurs propres par la puissance à laquelle la valeur -1 est déclenchée. Cette convention est plus courante dans la communauté des algorithmes quantiques, car elle est plus proche des bits classiques.