L'algorithme de Shor
Nous allons maintenant nous intéresser au problème de la factorisation des entiers, et voir comment il peut être résolu efficacement sur un ordinateur quantique à l'aide de l'estimation de phase. L'algorithme que nous obtiendrons est l'algorithme de Shor pour la factorisation des entiers. Shor n'a pas décrit son algorithme spécifiquement en termes d'estimation de phase, mais c'est une façon naturelle et intuitive d'expliquer son fonctionnement.
Nous commencerons par étudier un problème intermédiaire connu sous le nom de problème de recherche d'ordre, et nous verrons comment l'estimation de phase fournit une solution à ce problème. Nous verrons ensuite comment une solution efficace au problème de recherche d'ordre nous donne une solution efficace au problème de factorisation des entiers. (Lorsque la solution d'un problème fournit une solution à un autre problème de cette manière, on dit que le second problème se réduit au premier — donc, dans ce cas, nous réduisons la factorisation des entiers à la recherche d'ordre.) Cette seconde partie de l'algorithme de Shor n'a recours à aucun calcul quantique ; elle est entièrement classique. Le calcul quantique n'est nécessaire que pour résoudre la recherche d'ordre.
Le problème de recherche d'ordre
Quelques notions de base en théorie des nombres
Pour expliquer le problème de recherche d'ordre et la façon dont il peut être résolu par estimation de phase, il sera utile de commencer par quelques notions de base en théorie des nombres, et d'introduire au passage une notation pratique.
Pour commencer, pour tout entier positif donné, définissons l'ensemble comme suit.
Par exemple, et ainsi de suite.
Ce sont des ensembles de nombres, mais nous pouvons les considérer comme davantage que de simples ensembles. En particulier, nous pouvons penser à des opérations arithmétiques sur , telles que l'addition et la multiplication — et si nous convenons de toujours prendre nos résultats modulo (c'est-à-dire, diviser par et prendre le reste comme résultat), nous resterons toujours dans cet ensemble lorsque nous effectuons ces opérations. Les deux opérations spécifiques d'addition et de multiplication, toutes deux prises modulo , transforment en un anneau, qui est un type d'objet fondamentalement important en algèbre.
Par exemple, et sont des éléments de , et si nous les multiplions entre eux nous obtenons , qui laisse un reste de lorsqu'il est divisé par . Parfois, on exprime cela comme suit.
Mais nous pouvons aussi simplement écrire , à condition qu'il soit clair que nous travaillons dans , simplement pour garder notre notation aussi simple que possible.
À titre d'exemple, voici les tables d'addition et de multiplication pour
Parmi les éléments de les éléments qui satisfont sont particuliers. On note souvent l'ensemble contenant ces éléments à l'aide d'une étoile, comme ceci.
Si nous nous concentrons sur l'opération de multiplication, l'ensemble forme un groupe — plus précisément un groupe abélien — qui est un autre type d'objet important en algèbre. C'est un fait fondamental à propos de ces ensembles (et des groupes finis en général) que si nous prenons n'importe quel élément et que nous le multiplions plusieurs fois par lui-même, nous finirons toujours par obtenir le nombre
Pour un premier exemple, prenons Nous avons car et si nous multiplions par lui-même nous obtenons comme le confirme la table ci-dessus.
Pour un second exemple, prenons Si nous parcourons les nombres de à ceux dont le PGCD avec vaut sont les suivants.
Pour chacun de ces éléments, il est possible d'élever ce nombre à une puissance entière positive pour obtenir Voici les plus petites puissances pour lesquelles cela fonctionne :
Naturellement, nous travaillons dans pour toutes ces équations, ce que nous n'avons pas pris la peine d'écrire — nous le considérons comme implicite pour éviter d'alourdir les notations. Nous continuerons à faire ainsi tout au long de la leçon.
Énoncé du problème et lien avec l'estimation de phase
Nous pouvons maintenant énoncer le problème de recherche d'ordre.
De manière équivalente, avec la notation que nous venons d'introduire, on nous donne et nous cherchons le plus petit entier positif tel que Ce nombre est appelé l'ordre de modulo
Pour relier le problème de recherche d'ordre à l'estimation de phase, considérons l'opération définie sur un système dont les états classiques correspondent à où l'on multiplie par un élément fixe
Pour être précis, nous effectuons la multiplication dans donc il est sous-entendu que nous prenons le produit modulo à l'intérieur du ket, dans le membre de droite de l'équation.
Par exemple, si nous prenons et alors l'action de sur la base standard est la suivante.
Il s'agit d'une opération unitaire pourvu que elle mélange les éléments de la base standard de sorte que sous forme de matrice, il s'agit d'une matrice de permutation. Il est évident, d'après sa définition, que cette opération est déterministe, et une façon simple de voir qu'elle est inversible consiste à penser à l'ordre de modulo et à reconnaître que l'inverse de est
Il existe une autre façon de penser à l'inverse qui ne nécessite aucune connaissance de (qui, après tout, est ce que nous essayons de calculer). Pour tout élément il existe toujours un unique élément qui satisfait Nous notons cet élément par et il peut être calculé efficacement ; une extension de l'algorithme du PGCD d'Euclide le fait avec un coût quadratique en Et ainsi
Ainsi, l'opération est à la fois déterministe et inversible. Cela implique qu'elle est décrite par une matrice de permutation, et qu'elle est donc unitaire.
Intéressons-nous maintenant aux vecteurs propres et aux valeurs propres de l'opération en supposant que Comme nous venons de l'établir, cette hypothèse nous indique que est unitaire.
Il y a valeurs propres de éventuellement avec répétition d'une même valeur propre plusieurs fois, et en général il existe une certaine liberté dans le choix des vecteurs propres correspondants — mais nous n'avons pas besoin de nous préoccuper de toutes les possibilités. Commençons simplement et identifions un seul vecteur propre de
Le nombre est l'ordre de modulo ici et dans le reste de la leçon. La valeur propre associée à ce vecteur propre est car il n'est pas modifié lorsque nous multiplions par
Cela se produit parce que donc chaque état de la base standard est décalé vers pour et est renvoyé vers Pour parler de façon informelle, c'est comme si nous remuions lentement mais il est déjà complètement mélangé, donc rien ne change.
Voici un autre exemple de vecteur propre de Celui-ci se révèle plus intéressant dans le contexte de la recherche d'ordre et de l'estimation de phase.
De manière équivalente, nous pouvons écrire ce vecteur à l'aide d'une somme, comme suit.
Nous voyons ici apparaître naturellement le nombre complexe en raison de la manière dont fonctionne la multiplication par modulo Cette fois, la valeur propre correspondante est Pour le voir, nous pouvons d'abord calculer comme suit.
Ensuite, puisque et nous voyons que
donc
En utilisant le même raisonnement, nous pouvons identifier des paires vecteur propre/valeur propre supplémentaires pour Pour tout choix de nous avons que
est un vecteur propre de dont la valeur propre correspondante est
Il existe d'autres vecteurs propres de mais nous n'avons pas besoin de nous en préoccuper — nous nous concentrerons uniquement sur les vecteurs propres que nous venons d'identifier.
Recherche d'ordre par estimation de phase
Pour résoudre le problème de recherche d'ordre pour un choix donné de nous pouvons appliquer la procédure d'estimation de phase à l'opération
Pour cela, nous devons implémenter efficacement, avec un circuit quantique, non seulement mais aussi et ainsi de suite, en allant aussi loin que nécessaire pour obtenir une estimation suffisamment précise à partir de la procédure d'estimation de phase. Nous expliquerons ici comment cela peut être fait, et nous déterminerons plus tard exactement quelle précision est nécessaire.
Commençons par l'opération seule. Naturellement, comme nous travaillons avec le modèle des circuits quantiques, nous utiliserons la notation binaire pour coder les nombres entre et Le plus grand nombre que nous devons coder est donc le nombre de bits dont nous avons besoin est
Par exemple, si nous avons Voici à quoi ressemble le codage des éléments de sous forme de chaînes binaires de longueur
Et maintenant, voici une définition précise de la façon dont est défini comme une opération à qubits.
L'important est que, même si seul le comportement de pour nous intéresse, nous devons tout de même préciser comment elle agit sur les états restants de la base standard — et nous devons le faire de manière à obtenir malgré tout une opération unitaire. Définir de sorte qu'elle ne fasse rien aux états restants de la base standard permet d'y parvenir.
En utilisant les algorithmes de multiplication et de division entières abordés dans la leçon précédente, ainsi que la méthodologie pour leurs implémentations réversibles et sans déchets, nous pouvons construire un circuit quantique qui réalise pour tout choix de à un coût de Voici une façon de procéder.
-
Construire un circuit réalisant l'opération
où
en utilisant la méthode décrite dans la leçon précédente. Cela nous donne un circuit de taille
-
Échanger les deux systèmes de qubits en utilisant portes swap pour échanger les qubits individuellement.
-
De la même manière que pour la première étape, construire un circuit pour l'opération
où est l'inverse de dans
En initialisant les qubits du bas et en composant les trois étapes, nous obtenons la transformation suivante :
La méthode nécessite des qubits de travail, mais ceux-ci sont ramenés à leur état initialisé à la fin, ce qui nous permet d'utiliser ces circuits pour l'estimation de phase. Le coût total du circuit que nous obtenons est
Pour réaliser et ainsi de suite, nous pouvons utiliser exactement la même méthode, sauf que nous remplaçons par et ainsi de suite, en tant qu'éléments de C'est-à-dire que, pour toute puissance choisie, nous pouvons créer un circuit pour non pas en itérant fois le circuit de mais en calculant plutôt puis en utilisant le circuit de
Le calcul des puissances est le problème d'exponentiation modulaire mentionné dans la leçon précédente. Ce calcul peut être effectué classiquement, à l'aide de l'algorithme d'exponentiation modulaire mentionné dans la leçon précédente (souvent appelé l'algorithme des puissances en théorie algorithmique des nombres). En fait, nous n'avons besoin que des puissances de qui sont des puissances de 2, en particulier et nous pouvons obtenir ces puissances en élevant au carré de manière itérative fois. Chaque élévation au carré peut être réalisée par un circuit booléen de taille
En substance, ce que nous faisons ici revient à déléguer le problème consistant à itérer jusqu'à fois à un calcul classique efficace. Et c'est une chance que cela soit possible ! Pour un choix arbitraire de circuit quantique dans le problème d'estimation de phase, cela n'est en général pas possible — et dans ce cas, le coût résultant pour l'estimation de phase croît exponentiellement avec le nombre de qubits de contrôle
Solution étant donné un vecteur propre commode
Pour comprendre comment nous pouvons résoudre le problème de recherche d'ordre à l'aide de l'estimation de phase, commençons par supposer que nous exécutons la procédure d'estimation de phase sur l'opération en utilisant le vecteur propre Mettre la main sur ce vecteur propre n'est pas simple, comme nous le verrons, donc ce ne sera pas la fin de l'histoire — mais il est utile de commencer par là.
La valeur propre de correspondant au vecteur propre est
C'est-à-dire, pour Ainsi, si nous exécutons la procédure d'estimation de phase sur en utilisant le vecteur propre nous obtiendrons une approximation de En calculant l'inverse, nous pourrons déterminer — à condition que notre approximation soit suffisamment bonne.
Plus précisément, lorsque nous exécutons la procédure d'estimation de phase en utilisant qubits de contrôle, ce que nous obtenons est un nombre Nous prenons alors comme estimation de qui vaut dans le cas présent. Pour déterminer ce qu'est à partir de cette approximation, la chose naturelle à faire est de calculer l'inverse de notre approximation et d'arrondir à l'entier le plus proche.
Par exemple, supposons que et que nous effectuions l'estimation de phase sur avec le vecteur propre en utilisant bits de contrôle. La meilleure approximation sur bits de est et nous avons de bonnes chances (environ dans ce cas) d'obtenir le résultat lors de l'estimation de phase. Nous avons
et en arrondissant à l'entier le plus proche nous obtenons qui est la bonne réponse.
En revanche, si nous n'utilisons pas suffisamment de précision, nous risquons de ne pas obtenir la bonne réponse. Par exemple, si nous prenons qubits de contrôle dans l'estimation de phase, nous pourrions obtenir la meilleure approximation sur bits de qui est En prenant l'inverse, nous obtenons
et en arrondissant à l'entier le plus proche, nous obtenons la réponse incorrecte
Alors, de combien de précision avons-nous besoin pour obtenir la bonne réponse ? Nous savons que l'ordre est un entier, et intuitivement, ce dont nous avons besoin est d'une précision suffisante pour distinguer des possibilités voisines, notamment et Le nombre le plus proche de dont nous devons nous soucier est et la distance entre ces deux nombres est
Ainsi, si nous voulons nous assurer de ne pas confondre avec il suffit d'utiliser une précision suffisante pour garantir qu'une meilleure approximation de est plus proche de que de Si nous utilisons une précision suffisante pour que
de sorte que l'erreur soit inférieure à la moitié de la distance entre et alors sera plus proche de que de toute autre possibilité, y compris et
Nous pouvons le vérifier comme suit. Supposons que
pour satisfaisant
En prenant l'inverse, nous obtenons
En maximisant le numérateur et en minimisant le dénominateur, nous pouvons majorer l'écart par rapport à comme suit.
Nous sommes à moins de de donc, comme prévu, nous obtiendrons en arrondissant.
Malheureusement, comme nous ne savons pas encore ce qu'est nous ne pouvons pas l'utiliser pour déterminer la précision dont nous avons besoin. Ce que nous pouvons faire à la place, c'est utiliser le fait que doit être inférieur à pour nous assurer d'utiliser une précision suffisante. En particulier, si nous utilisons une précision suffisante pour garantir que la meilleure approximation de satisfait
alors nous aurons une précision suffisante pour déterminer correctement lorsque nous prendrons l'inverse. Prendre garantit une forte probabilité d'obtenir une estimation avec cette précision, à l'aide de la méthode décrite précédemment. (Prendre suffit si l'on se contente d'une probabilité de succès minorée par 40%.)
Solution générale
Comme nous venons de le voir, si nous disposons du vecteur propre de nous pouvons déterminer par estimation de phase, à condition d'utiliser suffisamment de qubits de contrôle pour le faire avec une précision suffisante. Malheureusement, il n'est pas facile de mettre la main sur le vecteur propre nous devons donc déterminer comment procéder.
Supposons un instant que nous procédions comme ci-dessus, mais avec le vecteur propre à la place de pour n'importe quel choix de que nous décidons de considérer. Le résultat que nous obtenons de la procédure d'estimation de phase sera une approximation
En supposant que nous ne connaissons ni ni cela peut ou non nous permettre de déterminer Par exemple, si nous obtiendrons une approximation de ce qui malheureusement ne nous apprend rien. Cependant, il s'agit d'un cas inhabituel ; pour les autres valeurs de nous pourrons au moins apprendre quelque chose sur
Nous pouvons utiliser un algorithme connu sous le nom d'algorithme des fractions continues pour transformer notre approximation en fractions voisines — y compris si l'approximation est suffisamment bonne. Nous n'expliquerons pas ici l'algorithme des fractions continues. Voici plutôt l'énoncé d'un résultat connu à propos de cet algorithme.
Si nous disposons d'une approximation très proche de et que nous exécutons l'algorithme des fractions continues pour et nous obtiendrons et tels que décrits dans ce résultat. Une analyse de ce résultat nous permet de conclure que
Remarquons en particulier que nous n'apprenons pas nécessairement et nous apprenons seulement sous forme irréductible.
Par exemple, comme nous l'avons déjà remarqué, nous n'apprendrons rien pour Mais c'est la seule valeur de pour laquelle cela se produit. Lorsque est non nul, il peut avoir des facteurs communs avec mais le nombre que nous obtenons à partir de l'algorithme des fractions continues doit au moins diviser
Cela est loin d'être évident, mais il est vrai que si nous avons la possibilité d'apprendre et pour avec choisi uniformément au hasard, alors nous avons de très bonnes chances de retrouver après seulement quelques échantillons. En particulier, si notre estimation de est le plus petit commun multiple de toutes les valeurs du dénominateur que nous observons, nous aurons raison avec une forte probabilité. Intuitivement, certaines valeurs de ne sont pas favorables car elles partagent des facteurs communs avec et ces facteurs communs nous restent cachés lorsque nous apprenons et Mais des choix aléatoires de ne sont pas susceptibles de cacher longtemps les facteurs de et la probabilité de ne pas deviner correctement en prenant le plus petit commun multiple des dénominateurs observés décroît de façon exponentielle avec le nombre d'échantillons.
Il reste à traiter la question de la façon dont nous mettons la main sur un vecteur propre de sur lequel exécuter la procédure d'estimation de phase. Il s'avère que nous n'avons en réalité pas besoin de les créer !
Ce que nous ferons à la place, c'est exécuter la procédure d'estimation de phase sur l'état par lequel nous entendons le codage binaire sur bits du nombre à la place d'un vecteur propre de Jusqu'à présent, nous n'avons parlé que d'exécuter la procédure d'estimation de phase sur un vecteur propre particulier, mais rien ne nous empêche d'exécuter la procédure sur un état d'entrée qui n'est pas un vecteur propre de et c'est ce que nous faisons ici avec l'état (Ce n'est pas un vecteur propre de à moins que ce qui n'est pas un choix qui nous intéresse.)
La raison pour laquelle nous choisissons l'état à la place d'un vecteur propre de est que l'équation suivante est vraie.
Une façon de vérifier cette équation consiste à comparer les produits scalaires des deux membres avec chaque état de la base standard, en utilisant les formules mentionnées précédemment dans la leçon pour aider à évaluer les résultats du membre de droite. Par conséquent, nous obtiendrons exactement les mêmes résultats de mesure que si nous avions choisi uniformément au hasard et utilisé comme vecteur propre.
Plus en détail, imaginons que nous exécutions la procédure d'estimation de phase avec l'état à la place de l'un des vecteurs propres Après application de la transformée de Fourier quantique inverse, il nous reste l'état
où
Le vecteur représente l'état des qubits du haut après application de l'inverse de la transformée de Fourier quantique sur ceux-ci.
Ainsi, en vertu du fait que est un ensemble orthonormé, nous constatons qu'une mesure des qubits du haut produit une approximation de la valeur où est choisi uniformément au hasard. Comme nous en avons déjà discuté, cela nous permet de déterminer avec un haut degré de confiance après plusieurs exécutions indépendantes, ce qui était notre objectif.
Coût total
Le coût d'implémentation de chaque unitaire contrôlée est Il y a opérations unitaires contrôlées, et nous avons donc le coût total des opérations unitaires contrôlées est De plus, nous avons portes de Hadamard (qui contribuent au coût), et la transformée de Fourier quantique inverse contribue au coût. Ainsi, le coût des opérations unitaires contrôlées domine le coût de l'ensemble de la procédure — qui est donc
Outre le circuit quantique lui-même, quelques calculs classiques doivent être effectués en cours de route. Cela inclut le calcul des puissances dans pour qui sont nécessaires pour créer les portes unitaires contrôlées, ainsi que l'algorithme des fractions continues qui convertit les approximations de en fractions. Ces calculs peuvent être réalisés par des circuits booléens dont le coût total est
Comme c'est généralement le cas, toutes ces bornes peuvent être améliorées à l'aide d'algorithmes asymptotiquement plus rapides ; ces bornes supposent que nous utilisons des algorithmes standards pour les opérations arithmétiques de base.
Factorisation par recherche d'ordre
La toute dernière chose que nous devons aborder est la façon dont la résolution du problème de recherche d'ordre nous aide à factoriser. Cette partie est entièrement classique — elle n'a rien à voir spécifiquement avec le calcul quantique.
Voici l'idée de base. Nous voulons factoriser le nombre et nous pouvons le faire récursivement. Plus précisément, nous pouvons nous concentrer sur la tâche consistant à scinder c'est-à-dire trouver deux entiers quelconques pour lesquels Ce n'est pas possible si est un nombre premier, mais nous pouvons tester efficacement si est premier à l'aide d'un algorithme de test de primalité d'abord, et si n'est pas premier nous tenterons de le scinder. Une fois que nous avons scindé nous pouvons simplement récurer sur et jusqu'à ce que tous nos facteurs soient premiers et que nous obtenions la factorisation en nombres premiers de
Scinder les entiers pairs est facile : il suffit de donner et
Il est également facile de scinder les puissances parfaites, c'est-à-dire les nombres de la forme pour des entiers simplement en approximant les racines et ainsi de suite, et en vérifiant les entiers proches comme candidats pour Nous n'avons pas besoin d'aller au-delà de étapes dans cette suite, car à partir de ce point la racine passe sous et ne révèle plus de candidats supplémentaires.
Il est heureux que nous puissions faire ces deux choses, car la recherche d'ordre ne nous aidera pas à factoriser les nombres pairs ni les puissances de nombres premiers, où le nombre se trouve être premier. Si est impair et n'est pas une puissance d'un nombre premier, en revanche, la recherche d'ordre nous permet de scinder
Une exécution de cet algorithme peut échouer à trouver un facteur de Cela se produit précisément dans deux situations :
- L'ordre de modulo est impair.
- L'ordre de modulo est pair et
En utilisant des notions de base en théorie des nombres, on peut prouver que, pour un choix aléatoire de avec une probabilité d'au moins aucun de ces événements ne se produit. En fait, la probabilité que l'un ou l'autre de ces événements se produise est d'au plus où est le nombre de facteurs premiers distincts de ce qui explique pourquoi l'hypothèse selon laquelle n'est pas une puissance d'un nombre premier est nécessaire. (L'hypothèse selon laquelle est impair est également nécessaire pour que ce fait soit vrai.)
Cela signifie que chaque exécution a au moins 50% de chances de scinder Par conséquent, si nous exécutons l'algorithme fois, en choisissant aléatoirement à chaque fois, nous réussirons à scinder avec une probabilité d'au moins
L'idée de base derrière l'algorithme est la suivante. Si nous disposons d'un choix de pour lequel l'ordre de modulo est pair, alors est un entier et nous pouvons considérer les nombres
En utilisant la formule nous concluons que
Or, nous savons que par définition de l'ordre — ce qui revient à dire que divise exactement Cela signifie que divise exactement le produit
Pour que cela soit vrai, tous les facteurs premiers de doivent également être des facteurs premiers de ou de (ou des deux) — et pour un choix aléatoire de il s'avère peu probable que tous les facteurs premiers de divisent l'un des deux termes sans qu'aucun ne divise l'autre. Sinon, dès lors que certains des facteurs premiers de divisent le premier terme et que d'autres divisent le second terme, nous pourrons trouver un facteur non trivial de en calculant le PGCD avec le premier terme.