Programmation quantique - Quantum programming

La programmation quantique est le processus d' assemblage de séquences d'instructions, appelées programmes quantiques, capables de s'exécuter sur un ordinateur quantique . Les langages de programmation quantiques aident à exprimer des algorithmes quantiques à l' aide de constructions de haut niveau.

Jeux d'instructions quantiques

Les jeux d'instructions quantiques sont utilisés pour transformer des algorithmes de niveau supérieur en instructions physiques pouvant être exécutées sur des processeurs quantiques. Parfois, ces instructions sont spécifiques à une plate-forme matérielle donnée, par exemple des pièges à ions ou des qubits supraconducteurs .

cQASM

cQASM, également connu sous le nom de QASM commun, est un QASM agnostique matériel qui garantit l'interopérabilité entre tous les outils de compilation et de simulation quantiques. Il a été introduit par le QCA Lab de TUDelft .

Quil

Quil est une architecture de jeu d'instructions pour l'informatique quantique qui a d'abord introduit un modèle de mémoire quantique/classique partagée. Il a été introduit par Robert Smith, Michael Curtis et William Zeng dans A Practical Quantum Instruction Set Architecture . De nombreux algorithmes quantiques (y compris la téléportation quantique , la correction d'erreur quantique , la simulation et les algorithmes d'optimisation) nécessitent une architecture de mémoire partagée.

OpenQASM

OpenQASM est la représentation intermédiaire introduite par IBM pour une utilisation avec Qiskit et IBM Q Experience .

Merle

Blackbird est un jeu d'instructions quantiques et une représentation intermédiaire utilisés par Xanadu Quantum Technologies et Strawberry Fields. Il est conçu pour représenter des programmes quantiques à variable continue pouvant s'exécuter sur du matériel quantique photonique.

Kits de développement logiciel Quantum

Les kits de développement de logiciels quantiques fournissent des collections d'outils pour créer et manipuler des programmes quantiques. Ils fournissent également les moyens de simuler les programmes quantiques ou de les préparer à être exécutés à l'aide de dispositifs quantiques basés sur le cloud .

SDK avec accès aux processeurs quantiques

Les kits de développement logiciel suivants peuvent être utilisés pour exécuter des circuits quantiques sur des prototypes de dispositifs quantiques, ainsi que sur des simulateurs.

océan

Une suite d'outils Open Source développée par D-Wave. Écrit principalement dans le langage de programmation Python, il permet aux utilisateurs de formuler des problèmes dans les formats Ising Model et Quadratic Unconstrained Binary Optimization (QUBO). Les résultats peuvent être obtenus en les soumettant à un ordinateur quantique en ligne dans Leap, à l'environnement d'application quantique en temps réel de D-Wave, à des machines appartenant au client ou à des échantillonneurs classiques.

Un exemple de code utilisant projectq avec Python

ProjetQ

Un projet Open Source développé à l'Institut de physique théorique de l' ETH , qui utilise le langage de programmation Python pour créer et manipuler des circuits quantiques. Les résultats sont obtenus soit à l'aide d'un simulateur, soit en envoyant des tâches aux appareils quantiques IBM.

Qiskit

Un projet Open Source développé par IBM . Les circuits quantiques sont créés et manipulés à l'aide de Python . Les résultats sont obtenus soit en utilisant des simulateurs qui fonctionnent sur le propre appareil de l'utilisateur, des simulateurs fournis par IBM ou des prototypes de dispositifs quantiques fournis par IBM. Outre la possibilité de créer des programmes à l'aide d'opérations quantiques de base, des outils de niveau supérieur pour les algorithmes et l'analyse comparative sont disponibles dans des packages spécialisés. Qiskit est basé sur le standard OpenQASM pour représenter les circuits quantiques. Il prend également en charge le contrôle du niveau d'impulsion des systèmes quantiques via la norme QiskitPulse.

forêt

Un projet Open Source développé par Rigetti , qui utilise le langage de programmation Python pour créer et manipuler des circuits quantiques. Les résultats sont obtenus soit à l'aide de simulateurs ou de prototypes de dispositifs quantiques fournis par Rigetti. En plus de la possibilité de créer des programmes à l'aide d'opérations quantiques de base, des algorithmes de niveau supérieur sont disponibles dans le package Grove. Forest est basé sur le jeu d'instructions Quil .

t|ket>

Un environnement de programmation quantique et un compilateur d'optimisation développé par Cambridge Quantum Computing qui cible les simulateurs et plusieurs back-ends matériels quantiques, sorti en décembre 2018.

champs de fraises

Une bibliothèque Python open source développée par Xanadu Quantum Technologies pour la conception, la simulation et l'optimisation de circuits optiques quantiques à variable continue (CV) . Trois simulateurs sont fournis : un dans la base Fock , un utilisant la formulation gaussienne de l'optique quantique et un utilisant la bibliothèque d'apprentissage automatique TensorFlow . Strawberry Fields est également la bibliothèque permettant d'exécuter des programmes sur le matériel photonique quantique de Xanadu.

Penny Lane

Une bibliothèque Python open source développée par Xanadu Quantum Technologies pour la programmation différentiable des ordinateurs quantiques. PennyLane offre aux utilisateurs la possibilité de créer des modèles à l'aide de TensorFlow , NumPy ou PyTorch , et de les connecter aux backends informatiques quantiques disponibles auprès d' IBMQ , Google Quantum , Rigetti , Honeywell et Alpine Quantum Technologies.

SDK basés sur des simulateurs

L'accès public aux appareils quantiques est actuellement prévu pour les SDK suivants, mais pas encore mis en œuvre.

Kit de développement quantique

Un projet développé par Microsoft dans le cadre du .NET Framework . Les programmes Quantum peuvent être écrits et exécutés dans Visual Studio et VSCode .

Cirq

Un projet Open Source développé par Google , qui utilise le langage de programmation Python pour créer et manipuler des circuits quantiques. Les résultats sont obtenus à l'aide de simulateurs qui fonctionnent sur le propre appareil de l'utilisateur.

Langages de programmation quantique

Il existe deux groupes principaux de langages de programmation quantique : les langages de programmation quantique impératifs et les langages de programmation quantique fonctionnels.

Langages impératifs

Les représentants les plus importants des langages impératifs sont QCL, LanQ et Q|SI>.

QCL

Quantum Computation Language (QCL) est l'un des premiers langages de programmation quantique mis en œuvre . La caractéristique la plus importante de QCL est la prise en charge d'opérateurs et de fonctions définis par l'utilisateur. Sa syntaxe ressemble à la syntaxe du langage de programmation C et ses types de données classiques sont similaires aux types de données primitifs en C. On peut combiner du code classique et du code quantique dans le même programme.

Pseudo-code quantique

Le pseudocode quantique proposé par E. Knill est le premier langage formalisé de description d' algorithmes quantiques . Il a été introduit et, de plus, était étroitement lié à un modèle de machine quantique appelé Quantum Random Access Machine (QRAM).

Q#

Un langage développé par Microsoft pour être utilisé avec le kit de développement Quantum .

Q|SI>

Q|SI> est une plate-forme intégrée au langage .Net prenant en charge la programmation quantique dans une extension quantique du langage while. Cette plate-forme comprend un compilateur du langage while quantique et une chaîne d'outils pour la simulation du calcul quantique, l'optimisation des circuits quantiques, l'analyse de terminaison de programmes quantiques et la vérification des programmes quantiques.

langue Q

Le langage Q est le deuxième langage de programmation quantique impératif implémenté. Le langage Q a été implémenté comme une extension du langage de programmation C++. Il fournit des classes pour les opérations quantiques de base telles que QHadamard, QFourier, QNot et QSwap, qui sont dérivées de la classe de base Qop. De nouveaux opérateurs peuvent être définis à l'aide du mécanisme de classe C++.

La mémoire quantique est représentée par la classe Qreg.

Qreg x1; // 1-qubit quantum register with initial value 0
Qreg x2(2,0); // 2-qubit quantum register with initial value 0

Le processus de calcul est exécuté à l'aide d'un simulateur fourni. Les environnements bruyants peuvent être simulés à l'aide des paramètres du simulateur.

qGCL

Quantum Guarded Command Language (qGCL) a été défini par P. Zuliani dans sa thèse de doctorat. Il est basé sur le Guarded Command Language créé par Edsger Dijkstra .

Il peut être décrit comme un langage de spécification de programmes quantiques.

QMASM

Quantum Macro Assembler (QMASM) est un langage de bas niveau spécifique aux anneleurs quantiques tels que le D-Wave.

Échafaud

Scaffold est un langage de type C, qui se compile en QASM et OpenQASM. Il est construit sur l' infrastructure du compilateur LLVM pour effectuer des optimisations sur le code Scaffold avant de générer un jeu d'instructions spécifié.

Silq

Silq est un langage de programmation de haut niveau pour l'informatique quantique avec un système de type statique puissant, développé à l' ETH Zürich .

Langages fonctionnels

Des efforts sont en cours pour développer des langages de programmation fonctionnels pour l'informatique quantique . Les langages de programmation fonctionnels sont bien adaptés pour raisonner sur les programmes. Les exemples incluent le QPL de Selinger et le langage de type Haskell QML par Altenkirch et Grattage. Des langages de programmation quantique d'ordre supérieur, basés sur le calcul lambda , ont été proposés par van Tonder, Selinger et Valiron et par Arrighi et Dowek.

QFC et QPL

QFC et QPL sont deux langages de programmation quantique étroitement liés définis par Peter Selinger. Ils ne diffèrent que par leur syntaxe : QFC utilise une syntaxe d'organigramme, tandis que QPL utilise une syntaxe textuelle. Ces langages ont un flux de contrôle classique mais peuvent fonctionner sur des données quantiques ou classiques. Selinger donne une sémantique dénotationnelle pour ces langages dans une catégorie de superopérateurs .

QML

QML est un langage de programmation quantique de type Haskell développé par Altenkirch et Grattage. Contrairement au QPL de Selinger, ce langage considère la duplication, plutôt que l'élimination, des informations quantiques comme une opération primitive. La duplication dans ce contexte est comprise comme l'opération qui correspond à , et ne doit pas être confondue avec l'opération impossible du clonage ; les auteurs affirment que cela s'apparente à la façon dont le partage est modélisé dans les langues classiques. QML introduit également des opérateurs de contrôle classiques et quantiques, alors que la plupart des autres langages reposent sur le contrôle classique.

Une sémantique opérationnelle pour QML est donnée en termes de circuits quantiques , tandis qu'une sémantique dénotationnelle est présentée en termes de superopérateurs , et ceux-ci sont montrés en accord. La sémantique opérationnelle et la sémantique dénotationnelle ont été implémentées (classiquement) en Haskell.

LIQUI|>

LIQUI|> (prononcé liquid ) est une extension de simulation quantique sur le langage de programmation F# . Il est actuellement développé par le Quantum Architectures and Computation Group (QuArC) dans le cadre des efforts StationQ de Microsoft Research. LIQUI|> cherche à permettre aux théoriciens d'expérimenter la conception d'algorithmes quantiques avant que les ordinateurs quantiques physiques ne soient disponibles.

Il comprend un langage de programmation, des algorithmes d'optimisation et d'ordonnancement et des simulateurs quantiques. LIQUI|> peut être utilisé pour traduire un algorithme quantique écrit sous la forme d'un programme de haut niveau en instructions machine de bas niveau pour un dispositif quantique.

Calculs lambda quantiques

Les calculs lambda quantiques sont des extensions du calcul lambda classique introduit par Alonzo Church et Stephen Cole Kleene dans les années 1930. Le but des calculs lambda quantiques est d'étendre les langages de programmation quantique avec une théorie des fonctions d'ordre supérieur .

La première tentative de définition d'un calcul lambda quantique a été faite par Philip Maymin en 1996. Son calcul lambda-q est suffisamment puissant pour exprimer n'importe quel calcul quantique. Cependant, ce langage peut résoudre efficacement des problèmes NP-complets et semble donc être strictement plus puissant que les modèles de calcul quantiques standard (tels que la machine quantique de Turing ou le modèle de circuit quantique ). Par conséquent, le calcul lambda-q de Maymin n'est probablement pas implémentable sur un périphérique physique.

En 2003, André van Tonder a défini une extension du calcul lambda appropriée pour prouver l'exactitude des programmes quantiques. Il a également fourni une implémentation dans le langage de programmation Scheme .

En 2004, Selinger et Valiron ont défini un calcul lambda fortement typé pour le calcul quantique avec un système de types basé sur la logique linéaire .

Quipper

Quipper a été publié en 2013. Il est implémenté en tant que langage intégré, utilisant Haskell comme langage hôte. Pour cette raison, les programmes quantiques écrits dans Quipper sont écrits en Haskell à l' aide des bibliothèques fournies. Par exemple, le code suivant implémente la préparation d'une superposition

import Quipper

spos :: Bool -> Circ Qubit
spos b = do q <- qinit b
            r <- hadamard q
            return r

funQ

Un groupe d'étudiants de premier cycle de l'Université de technologie de Chalmers a développé un langage de programmation quantique fonctionnel en 2021. Il s'inspire du calcul lambda à typage quantique de Selinger et Valiron. Le simulateur quantique sous-jacent fait partie d'une bibliothèque Haskell du même nom. Le code suivant implémente la superposition dans funQ

spos : !(Bit -o QBit)
spos b = H (new b)

Le même exemple dans la bibliothèque Haskell serait

import FunQ

spos :: Bit -> QM QBit
spos b = hadamard =<< new b

Les références

Lectures complémentaires

Liens externes