Calculs classiques sur des ordinateurs quantiques
Nous allons maintenant nous pencher sur la mise en œuvre d'algorithmes classiques sur des ordinateurs quantiques. Nous verrons que tout calcul réalisable avec un circuit booléen classique peut également être effectué par un circuit quantique avec un coût computationnel asymptotique similaire. De plus, cela peut être fait de manière « propre », comme décrit prochainement, ce qui est une exigence importante pour utiliser ces calculs comme sous-routines dans des calculs quantiques plus larges.
Simulation de circuits booléens avec des circuits quantiques
Les circuits booléens sont composés de portes ET, OU, NON et FANOUT. Pour simuler les circuits booléens avec des circuits quantiques, nous commencerons par montrer comment chacune de ces quatre portes peut être simulée par des portes quantiques. Une fois cela fait, convertir un circuit booléen donné en circuit quantique est une simple question de simulation porte par porte. Nous aurons seulement besoin de portes NON, de portes NON contrôlées et de portes Toffoli pour ce faire, qui sont toutes des opérations déterministes en plus d'être unitaires.
Portes Toffoli
Les portes Toffoli peuvent aussi être décrites comme des portes NON contrôlées-contrôlées, dont l'action sur les états de la base standard est représentée dans la figure suivante.
En gardant à l'esprit que nous utilisons la convention d'ordre de Qiskit, où les qubits sont ordonnés par signification croissante de haut en bas, la représentation matricielle de cette porte est la suivante.
Une autre façon de considérer les portes Toffoli est qu'elles sont essentiellement des portes de requête pour la fonction ET, dans le sens où elles suivent le schéma que nous avons vu dans la leçon précédente pour les implémentations de portes de requête unitaires de fonctions arbitraires à entrées et sorties binaires.
Les portes Toffoli ne sont pas incluses dans l'ensemble de portes par défaut discuté plus tôt dans la leçon, mais il est possible de construire une porte Toffoli à partir de portes et CNOT comme suit.
Simulation de portes booléennes avec des portes Toffoli, NON contrôlées et NON
Une seule porte Toffoli, utilisée conjointement avec quelques portes NON, peut implémenter une porte ET et une porte OU, et les portes FANOUT peuvent facilement être implémentées en utilisant des portes NON contrôlées, comme le suggèrent les diagrammes suivants.
Dans les trois cas, les qubits sur lesquels les portes ET, OU et FANOUT agissent arrivent de la gauche comme entrées, et on a également besoin d'un qubit d'espace de travail initialisé à l'état zéro pour chacun. Ces qubits d'espace de travail apparaissent à l'intérieur des boîtes représentant les implémentations de portes pour suggérer qu'ils sont nouveaux, et donc font partie du coût de ces implémentations.
Pour les portes ET et OU, on a également deux qubits en surplus, en plus du qubit de sortie. Par exemple, à l'intérieur de la boîte dans le diagramme représentant la simulation d'une porte ET, les deux qubits du haut restent dans les états et Ces qubits sont illustrés comme restant à l'intérieur des boîtes car ils ne sont plus nécessaires et ne font pas partie de la sortie. Ils peuvent être ignorés pour l'instant, bien qu'on y revienne prochainement.
La porte booléenne restante, la porte NON, est incluse dans notre ensemble de portes quantiques par défaut, donc on n'a pas besoin de simulation pour celle-ci.
Simulation porte par porte de circuits booléens
Supposons maintenant qu'on ait un circuit booléen ordinaire nommé composé de portes ET, OU, NON et FANOUT, et ayant bits d'entrée et bits de sortie. Soit le nombre de portes dans et donnons le nom à la fonction que calcule, qui prend la forme
pour
Considérons maintenant ce qui se passe lorsqu'on parcourt une à une les portes ET, OU et FANOUT de en remplaçant chacune par la simulation correspondante décrite ci-dessus, y compris l'ajout des qubits d'espace de travail requis. Nommons le circuit résultant et ordonnons les qubits de de sorte que les bits d'entrée de correspondent aux qubits du haut de et les qubits d'espace de travail se trouvent en bas.
Ici, est le nombre de qubits d'espace de travail requis — un pour chaque porte ET, OU et FANOUT de — et est une fonction de la forme qui décrit les états des qubits en surplus créés par les simulations de portes après l'exécution de . Dans la figure, les qubits correspondant à la sortie sont en haut et les qubits restants en surplus stockant sont en bas. On peut forcer cela en réarrangeant les qubits à l'aide de portes SWAP, qui peuvent être implémentées avec trois portes NON contrôlées comme ceci :
Comme nous le verrons dans la prochaine section, il n'est pas vraiment essentiel de réarranger les qubits de sortie de cette façon, mais c'est facile à faire si on le choisit.
La fonction qui décrit les états classiques des qubits en surplus est déterminée par le circuit mais on n'a pas vraiment besoin de s'en préoccuper ; on ne se soucie pas spécifiquement de l'état dans lequel se trouvent ces qubits lorsque le calcul se termine. La lettre vient après donc c'est un nom raisonnable pour cette fonction à cet égard, mais il y a une meilleure raison de choisir le nom — c'est l'abréviation de garbage (déchet).
Nettoyer les déchets
Si notre seul intérêt est d'évaluer la fonction calculée par un circuit booléen avec un circuit quantique, on n'a pas besoin d'aller plus loin que la simulation porte par porte venant d'être décrite. Cela signifie qu'en plus de la sortie de la fonction, on aura un tas de déchets en surplus.
Cependant, cela n'est pas suffisant si on veut effectuer des calculs classiques comme sous-routines dans des calculs quantiques plus larges, car ces qubits de déchets vont causer des problèmes. Le phénomène d'interférence est d'une importance cruciale pour les algorithmes quantiques, et les qubits de déchets peuvent ruiner les schémas d'interférence nécessaires au bon fonctionnement des algorithmes quantiques.
Heureusement, il n'est pas difficile de nettoyer les déchets, pour ainsi dire. La clé est d'utiliser le fait que, puisque est un circuit quantique, on peut l'exécuter à rebours, en remplaçant simplement chaque porte par son inverse et en les appliquant dans l'ordre inverse, obtenant ainsi un circuit quantique pour l'opération Les portes Toffoli, les portes CNOT et les portes NON sont en réalité leurs propres inverses, donc exécuter à rebours revient vraiment juste à appliquer les portes dans l'ordre inverse — mais plus généralement, tout circuit quantique peut être inversé comme décrit.
Concrètement, ce qu'on peut faire est d'ajouter qubits supplémentaires (en rappelant que la fonction a bits de sortie), d'utiliser des portes CNOT pour copier la sortie de sur ces qubits, et d'inverser pour nettoyer les déchets. La figure suivante illustre le circuit résultant et décrit son action sur les états de la base standard.
Si on met une boîte autour de l'ensemble du circuit et qu'on l'appelle ça ressemble à ceci :
Étant donné que a portes, le circuit aura portes.
Si on fait abstraction des qubits d'espace de travail supplémentaires, ce qu'on a est un circuit qui fonctionne exactement comme une porte de requête pour la fonction Si on veut simplement calculer la fonction sur une chaîne on peut poser et la valeur résultante apparaîtra sur les qubits du bas — ou on peut fournir un état différent aux qubits du bas si on le souhaite (peut-être pour faire usage d'un retour de phase, comme dans l'algorithme de Deutsch ou l'algorithme de Deutsch-Jozsa).
Cela signifie que, pour tout algorithme par requêtes, si on dispose d'un circuit booléen qui calcule la fonction d'entrée, on peut remplacer chaque porte de requête par une implémentation en circuit de celle-ci, et l'algorithme par requêtes fonctionnera correctement.
Notons que les qubits d'espace de travail sont nécessaires pour que ce processus fonctionne, mais ils sont ramenés à leurs états initiaux une fois que le circuit combiné est exécuté. Cela permet que ces qubits soient réutilisés comme qubits d'espace de travail à d'autres fins. Il existe également des stratégies connues pour réduire le nombre de qubits d'espace de travail requis (au prix de rendre les circuits plus grands), mais nous ne discuterons pas de ces stratégies ici.
Implémentation de fonctions inversibles
La construction décrite ci-dessus nous permet de simuler n'importe quel circuit booléen avec un circuit quantique sans déchets. Si est un circuit booléen implémentant une fonction alors on obtient un circuit quantique qui opère comme suit sur les états de la base standard.
Le nombre indique combien de qubits d'espace de travail sont requis au total. C'est suffisant pour les besoins de ce cours, mais il est possible de pousser cette méthodologie un peu plus loin lorsque la fonction elle-même est inversible.
Pour être précis, supposons que la fonction prenne la forme et supposons également qu'il existe une fonction telle que pour tout (qui est nécessairement unique lorsqu'elle existe). Cela signifie que l'opération qui transforme en pour tout est unitaire, donc on pourrait espérer construire un circuit quantique qui implémente l'opération unitaire définie par
pour tout
Pour être clair, le fait que ce soit une opération unitaire repose sur le fait que est inversible — ce n'est pas unitaire quand ne l'est pas. En faisant abstraction des qubits d'espace de travail, est différent de l'opération que le circuit implémente car on ne conserve pas une copie de l'entrée et ne lui applique pas un XOR vers une chaîne arbitraire, on remplace par
La question est : quand est inversible, peut-on faire cela ?
La réponse est oui, à condition qu'on soit autorisé à utiliser des qubits d'espace de travail et, en plus d'avoir un circuit booléen qui calcule on en ait également un qui calcule Ce n'est donc pas un raccourci pour inverser computationnellement des fonctions quand on ne sait pas déjà comment faire ! Le diagramme suivant illustre comment cela peut être fait en composant deux circuits quantiques, et qui sont obtenus individuellement pour les fonctions et via la méthode décrite ci-dessus, ainsi que portes de permutation, en prenant comme le maximum du nombre de qubits d'espace de travail requis par et