L'algoritmo di Shor
Ora rivolgeremo la nostra attenzione al problema della fattorizzazione intera, e vedremo come può essere risolto in modo efficiente su un computer quantistico utilizzando la stima di fase. L'algoritmo che otterremo è l'algoritmo di Shor per la fattorizzazione intera. Shor non ha descritto il suo algoritmo specificamente in termini di stima di fase, ma è un modo naturale e intuitivo per spiegare come funziona.
Inizieremo discutendo un problema intermedio noto come il problema di ricerca dell'ordine e vedremo come la stima di fase fornisce una soluzione a questo problema. Vedremo poi come una soluzione efficiente al problema di ricerca dell'ordine ci fornisce una soluzione efficiente al problema della fattorizzazione intera. (Quando la soluzione a un problema fornisce una soluzione a un altro problema in questo modo, diciamo che il secondo problema si riduce al primo — quindi in questo caso stiamo riducendo la fattorizzazione intera alla ricerca dell'ordine.) Questa seconda parte dell'algoritmo di Shor non fa uso del calcolo quantistico; è completamente classica. Il calcolo quantistico è necessario solo per risolvere la ricerca dell'ordine.
Il problema di ricerca dell'ordine
Alcuni concetti base di teoria dei numeri
Per spiegare il problema di ricerca dell'ordine e come può essere risolto usando la stima di fase, sarà utile iniziare con un paio di concetti fondamentali di teoria dei numeri, e introdurre alcune notazioni pratiche lungo il percorso.
Per cominciare, per ogni intero positivo definiamo l'insieme come segue.
Ad esempio, e così via.
Questi sono insiemi di numeri, ma possiamo pensarli come qualcosa di più di semplici insiemi. In particolare, possiamo pensare alle operazioni aritmetiche su come l'addizione e la moltiplicazione — e se concordiamo di prendere sempre i risultati modulo (cioè, dividiamo per e prendiamo il resto come risultato), rimarremo sempre all'interno di questo insieme quando eseguiamo queste operazioni. Le due operazioni specifiche di addizione e moltiplicazione, entrambe prese modulo trasformano in un anello, che è un tipo di oggetto fondamentalmente importante in algebra.
Ad esempio, e sono elementi di e se li moltiplichiamo otteniamo che lascia un resto di quando diviso per A volte lo esprimiamo come segue.
Ma possiamo anche scrivere semplicemente purché sia chiaro che stiamo lavorando in solo per mantenere la notazione il più semplice possibile.
Come esempio, ecco le tavole di addizione e moltiplicazione per
Tra gli elementi di gli elementi che soddisfano sono speciali. Spesso l'insieme contenente questi elementi è denotato con un asterisco come segue.
Se focalizziamo la nostra attenzione sull'operazione di moltiplicazione, l'insieme forma un gruppo — specificamente un gruppo abeliano — che è un altro tipo di oggetto importante in algebra. È un fatto fondamentale riguardo a questi insiemi (e ai gruppi finiti in generale), che se scegliamo qualsiasi elemento e moltiplichiamo ripetutamente per se stesso, otterremo sempre alla fine il numero
Come primo esempio, prendiamo Abbiamo che perché e se moltiplichiamo per se stesso otteniamo come conferma la tavola sopra.
Come secondo esempio, prendiamo Se passiamo in rassegna i numeri da a quelli con MCD uguale a con sono i seguenti.
Per ciascuno di questi elementi, è possibile elevare quel numero a una potenza intera positiva per ottenere Ecco le potenze più piccole per cui questo funziona:
Naturalmente stiamo lavorando all'interno di per tutte queste equazioni, cosa che non abbiamo scritto — la consideriamo implicita per evitare di appesantire la notazione. Continueremo a farlo nel resto della lezione.
Enunciato del problema e connessione con la stima di fase
Ora possiamo enunciare il problema di ricerca dell'ordine.
In alternativa, in termini della notazione appena introdotta, ci vengono dati e stiamo cercando il più piccolo intero positivo tale che Questo numero è chiamato ordine di modulo
Per collegare il problema di ricerca dell'ordine alla stima di fase, pensiamo all'operazione definita su un sistema i cui stati classici corrispondono a dove moltiplichiamo per un elemento fisso
Per essere chiari, stiamo eseguendo la moltiplicazione in quindi è implicito che stiamo prendendo il prodotto modulo all'interno del ket sul lato destro dell'equazione.
Ad esempio, se prendiamo e allora l'azione di sulla base standard è la seguente.
Questa è un'operazione unitaria purché permuta gli elementi della base standard quindi come matrice è una matrice di permutazione. È evidente dalla sua definizione che questa operazione è deterministica, e un modo semplice per vedere che è invertibile è pensare all'ordine di modulo e riconoscere che l'inverso di è
C'è un altro modo per pensare all'inverso che non richiede alcuna conoscenza di (che, dopotutto, è ciò che stiamo cercando di calcolare). Per ogni elemento esiste sempre un elemento unico che soddisfa Denotiamo questo elemento con e può essere calcolato in modo efficiente; un'estensione dell'algoritmo di Euclide per il MCD lo fa con costo quadratico in E quindi
Quindi, l'operazione è sia deterministica che invertibile. Ciò implica che è descritta da una matrice di permutazione, ed è quindi unitaria.
Ora pensiamo agli autovettori e agli autovalori dell'operazione assumendo che Come appena argomentato, questa assunzione ci dice che è unitaria.
Ci sono autovalori di eventualmente includendo lo stesso autovalore ripetuto più volte, e in generale c'è una certa libertà nella scelta degli autovettori corrispondenti — ma non avremo bisogno di preoccuparci di tutte le possibilità. Iniziamo semplicemente identificando un solo autovettore di
Il numero è l'ordine di modulo qui e nel resto della lezione. L'autovalore associato a questo autovettore è perché non viene modificato quando moltiplichiamo per
Questo accade perché quindi ogni stato della base standard viene spostato in per e viene riportato a In modo informale, è come se stessimo mescolando lentamente ma è già completamente mescolato quindi nulla cambia.
Ecco un altro esempio di autovettore di Questo è più interessante nel contesto della ricerca dell'ordine e della stima di fase.
In alternativa, possiamo scrivere questo vettore usando una sommatoria come segue.
Qui vediamo il numero complesso apparire naturalmente, a causa del modo in cui la moltiplicazione per funziona modulo Questa volta l'autovalore corrispondente è Per verificarlo, possiamo prima calcolare come segue.
Poi, poiché e vediamo che
quindi
Usando lo stesso ragionamento, possiamo identificare ulteriori coppie autovettore/autovalore per Per qualsiasi scelta di abbiamo che
è un autovettore di il cui autovalore corrispondente è
Ci sono altri autovettori di ma non dobbiamo preoccuparcene — ci concentreremo esclusivamente sugli autovettori che abbiamo appena identificato.
Trovare l'ordine tramite la stima di fase
Per risolvere il problema della ricerca dell'ordine per una data scelta di possiamo applicare la procedura di stima di fase all'operazione
Per farlo, dobbiamo implementare in modo efficiente con un circuito quantistico non solo ma anche e così via, spingendoci quanto necessario per ottenere una stima sufficientemente precisa dalla procedura di stima di fase. Qui spiegheremo come questo può essere fatto, e capiremo esattamente quanta precisione è necessaria in seguito.
Cominciamo con l'operazione da sola. Naturalmente, poiché lavoriamo con il modello del circuito quantistico, utilizzeremo la notazione binaria per codificare i numeri compresi tra e Il numero più grande che dobbiamo codificare è quindi il numero di bit necessari è
Per esempio, se abbiamo Ecco come appare la codifica degli elementi di come stringhe binarie di lunghezza
E ora, ecco una definizione precisa di come è definita come operazione su qubit.
Il punto è che, sebbene ci interessi solo il funzionamento di per dobbiamo comunque specificare come si comporta per i restanti stati della base standard — e dobbiamo farlo in modo da ottenere comunque un'operazione unitaria. Definire in modo che non faccia nulla sui restanti stati della base standard raggiunge questo obiettivo.
Usando gli algoritmi per la moltiplicazione e la divisione di interi discussi nella lezione precedente, insieme alla metodologia per implementazioni reversibili e senza spazzatura, possiamo costruire un circuito quantistico che esegue per qualsiasi scelta di con costo Ecco un modo in cui questo può essere fatto.
-
Costruire un circuito per eseguire l'operazione
dove
usando il metodo descritto nella lezione precedente. Questo ci fornisce un circuito di dimensione
-
Scambiare i due sistemi da qubit usando swap gate per scambiare i qubit individualmente.
-
In modo analogo al primo passo, costruire un circuito per l'operazione
dove è l'inverso di in
Inizializzando gli qubit inferiori e componendo i tre passi, otteniamo questa trasformazione:
Il metodo richiede qubit di lavoro, ma vengono riportati al loro stato inizializzato alla fine, il che ci permette di usare questi circuiti per la stima di fase. Il costo totale del circuito ottenuto è
Per eseguire e così via, possiamo usare esattamente lo stesso metodo, tranne che sostituiamo con e così via, come elementi di In altre parole, per qualsiasi potenza scegliamo, possiamo creare un circuito per non iterando volte il circuito per ma invece calcolando e poi usando il circuito per
Il calcolo delle potenze è il problema dell'esponenziazione modulare menzionato nella lezione precedente. Questo calcolo può essere eseguito classicamente, usando l'algoritmo per l'esponenziazione modulare menzionato nella lezione precedente (spesso chiamato algoritmo della potenza in teoria computazionale dei numeri). In realtà, richiediamo solo potenze di che siano potenze di 2, in particolare e possiamo ottenere queste potenze elevando iterativamente al quadrato volte. Ogni elevamento al quadrato può essere eseguito da un circuito booleano di dimensione
In sostanza, quello che stiamo effettivamente facendo qui è delegare il problema di iterare fino a volte a un efficiente calcolo classico. Ed è una fortuna che questo sia possibile! Per una scelta arbitraria di un circuito quantistico nel problema della stima di fase, questo probabilmente non sarà possibile — e in quel caso il costo risultante per la stima di fase cresce esponenzialmente nel numero di qubit di controllo
Soluzione dato un autovettore conveniente
Per capire come possiamo risolvere il problema della ricerca dell'ordine usando la stima di fase, cominciamo supponendo che eseguiamo la procedura di stima di fase sull'operazione usando l'autovettore Ottenere questo autovettore non è facile, come si vedrà, quindi questa non sarà la fine della storia — ma è utile partire da qui.
L'autovalore di corrispondente all'autovettore è
Ovvero, con Quindi, se eseguiamo la procedura di stima di fase su usando l'autovettore otterremo un'approssimazione di Calcolando il reciproco saremo in grado di apprendere — a condizione che la nostra approssimazione sia sufficientemente buona.
Più in dettaglio, quando eseguiamo la procedura di stima di fase usando qubit di controllo, quello che otteniamo è un numero Prendiamo poi come stima per che nel caso in esame è Per capire qual è da questa approssimazione, la cosa naturale da fare è calcolare il reciproco della nostra approssimazione e arrotondare all'intero più vicino.
Per esempio, supponiamo che e che eseguiamo la stima di fase su con l'autovettore usando bit di controllo. La migliore approssimazione a bit di è e abbiamo una buona probabilità (circa il in questo caso) di ottenere l'esito dalla stima di fase. Abbiamo
e arrotondando all'intero più vicino otteniamo che è la risposta corretta.
D'altra parte, se non usiamo una precisione sufficiente, potremmo non ottenere la risposta giusta. Per esempio, se prendiamo qubit di controllo nella stima di fase, potremmo ottenere la migliore approssimazione a bit di che è Prendendo il reciproco si ottiene
e arrotondando all'intero più vicino si ottiene una risposta errata di
Quindi quanta precisione ci serve per ottenere la risposta giusta? Sappiamo che l'ordine è un intero, e intuitivamente quello di cui abbiamo bisogno è una precisione sufficiente per distinguere dalle possibilità vicine, incluse e Il numero più vicino a di cui dobbiamo preoccuparci è e la distanza tra questi due numeri è
Quindi, se vogliamo assicurarci di non scambiare per è sufficiente usare una precisione tale da garantire che la migliore approssimazione a sia più vicina a che a Se usiamo una precisione tale da garantire che
cosicché l'errore sia inferiore alla metà della distanza tra e allora sarà più vicino a che a qualsiasi altra possibilità, incluse e
Possiamo verificarlo come segue. Supponiamo che
per che soddisfa
Quando prendiamo il reciproco otteniamo
Massimizzando al numeratore e minimizzando al denominatore, possiamo limitare quanto siamo lontani da come segue.
Siamo a meno di da quindi come previsto otterremo quando arrotondiamo.
Purtroppo, poiché non sappiamo ancora cosa sia non possiamo usarlo per dirci quanta precisione ci serve. Quello che possiamo fare invece è usare il fatto che deve essere minore di per assicurarci di usare una precisione sufficiente. In particolare, se usiamo una precisione tale da garantire che la migliore approssimazione a soddisfi
allora avremo una precisione sufficiente per determinare correttamente quando prendiamo il reciproco. Prendere garantisce una buona probabilità di ottenere una stima con questa precisione usando il metodo descritto in precedenza. (Prendere è sufficiente se si è soddisfatti di un limite inferiore del 40% sulla probabilità di successo.)
Soluzione generale
Come abbiamo appena visto, se abbiamo l'autovettore di possiamo apprendere tramite la stima di fase, a patto di usare un numero sufficiente di qubit di controllo per farlo con la precisione necessaria. Purtroppo, non è facile ottenere l'autovettore quindi dobbiamo capire come procedere.
Supponiamo momentaneamente di procedere come sopra, ma con l'autovettore al posto di per qualsiasi scelta di che decidiamo di considerare. Il risultato che otteniamo dalla procedura di stima di fase sarà un'approssimazione
Assumendo di non conoscere né né questo potrebbe o meno permetterci di identificare Per esempio, se otterremo un'approssimazione a che purtroppo non ci dice nulla. Questo, tuttavia, è un caso insolito; per altri valori di saremo almeno in grado di imparare qualcosa su
Possiamo usare un algoritmo noto come algoritmo delle frazioni continue per trasformare la nostra approssimazione in frazioni vicine — inclusa se l'approssimazione è sufficientemente buona. Non spiegheremo qui l'algoritmo delle frazioni continue. Invece, ecco un enunciato di un fatto noto su questo algoritmo.
Se abbiamo un'approssimazione molto stretta a ed eseguiamo l'algoritmo delle frazioni continue per e otterremo e come descritti nel fatto. Un'analisi del fatto ci permette di concludere che
Si noti in particolare che non necessariamente apprendiamo e ma solo nella sua forma ridotta ai minimi termini.
Per esempio, e come abbiamo già notato, non impareremo nulla da Ma questo è l'unico valore di per cui accade. Quando è diverso da zero, potrebbe avere fattori comuni con ma il numero che otteniamo dall'algoritmo delle frazioni continue deve almeno dividere
Non è affatto ovvio, ma è vero che se abbiamo la capacità di apprendere e per con scelto uniformemente a caso, allora è molto probabile che riusciamo a recuperare dopo solo pochi campionamenti. In particolare, se la nostra ipotesi per è il minimo comune multiplo di tutti i valori del denominatore che osserviamo, avremo ragione con alta probabilità. Intuitivamente, alcuni valori di non sono buoni perché condividono fattori comuni con e quei fattori comuni ci rimangono nascosti quando apprendiamo e Ma le scelte casuali di non sono portate a nascondere fattori di a lungo, e la probabilità che non indoviniamo correttamente prendendo il minimo comune multiplo dei denominatori che osserviamo decresce esponenzialmente nel numero di campionamenti.
Resta da affrontare il problema di come otteniamo un autovettore di su cui eseguire la procedura di stima di fase. Come risulta, in realtà non abbiamo bisogno di crearlo!
Quello che faremo invece è eseguire la procedura di stima di fase sullo stato intendendo con ciò la codifica binaria a bit del numero al posto di un autovettore di Finora abbiamo parlato solo di eseguire la procedura di stima di fase su un particolare autovettore, ma nulla ci impedisce di eseguire la procedura su uno stato di ingresso che non è un autovettore di ed è quello che stiamo facendo qui con lo stato (Questo non è un autovettore di a meno che che non è una scelta che ci interesserà.)
La motivazione per scegliere lo stato al posto di un autovettore di è che la seguente equazione è vera.
Un modo per verificare questa equazione è confrontare i prodotti interni dei due lati con ogni stato della base standard, usando le formule menzionate in precedenza nella lezione per valutare i risultati del lato destro. Di conseguenza, otterremo esattamente gli stessi risultati di misura come se avessimo scelto uniformemente a caso e usato come autovettore.
In maggior dettaglio, immaginiamo di eseguire la procedura di stima di fase con lo stato al posto di uno degli autovettori Dopo che la trasformata di Fourier quantistica inversa è stata eseguita, questo ci lascia con lo stato
dove
Il vettore rappresenta lo stato degli qubit superiori dopo che la trasformata di Fourier quantistica inversa è stata eseguita su di essi.
Quindi, in virtù del fatto che è un insieme ortonormale, troviamo che una misura degli qubit superiori fornisce un'approssimazione al valore dove è scelto uniformemente a caso. Come già discusso, questo ci permette di apprendere con un alto grado di fiducia dopo diverse esecuzioni indipendenti, che era il nostro obiettivo.
Costo totale
Il costo per implementare ogni unitaria controllata è Ci sono operazioni unitarie controllate, e abbiamo quindi il costo totale per le operazioni unitarie controllate è Inoltre, abbiamo gate di Hadamard (che contribuiscono al costo), e la trasformata di Fourier quantistica inversa contribuisce al costo. Pertanto, il costo delle operazioni unitarie controllate domina il costo dell'intera procedura — che è quindi
Oltre al circuito quantistico stesso, ci sono alcuni calcoli classici che devono essere eseguiti durante il processo. Questo include il calcolo delle potenze in per necessarie per creare i gate unitari controllati, nonché l'algoritmo delle frazioni continue che converte le approssimazioni di in frazioni. Questi calcoli possono essere eseguiti da circuiti booleani con un costo totale di
Come è tipico, tutti questi limiti possono essere migliorati usando algoritmi asintoticamente veloci; questi limiti assumono l'uso di algoritmi standard per le operazioni aritmetiche di base.
Fattorizzare tramite la ricerca dell'ordine
L'ultimissima cosa che dobbiamo discutere è come la soluzione al problema della ricerca dell'ordine ci aiuti a fattorizzare. Questa parte è completamente classica — non ha nulla che riguardi specificamente il calcolo quantistico.
Ecco l'idea di base. Vogliamo fattorizzare il numero e possiamo farlo ricorsivamente. Nello specifico, possiamo concentrarci sul compito di dividere che significa trovare due interi qualsiasi per cui Questo non è possibile se è un numero primo, ma possiamo verificare in modo efficiente se è primo usando prima un algoritmo di test di primalità, e se non è primo cercheremo di dividerlo. Una volta diviso possiamo semplicemente ricorrere su e fino a quando tutti i nostri fattori sono primi e otteniamo la fattorizzazione in fattori primi di
Dividere i numeri pari è semplice: basta restituire e
È anche facile dividere le potenze perfette, ovvero numeri della forma per interi semplicemente approssimando le radici e così via, e controllando gli interi vicini come candidati per Non occorre andare oltre passi in questa sequenza, perché a quel punto la radice scende sotto e non rivelerà ulteriori candidati.
È positivo che riusciamo a fare entrambe queste cose, perché la ricerca dell'ordine non ci aiuterà a fattorizzare i numeri pari né le potenze di numeri primi, dove il numero è primo. Se è dispari e non è una potenza di primo, tuttavia, la ricerca dell'ordine ci permette di dividere
Un'esecuzione di questo algoritmo potrebbe non riuscire a trovare un fattore di In particolare, questo accade in due situazioni:
- L'ordine di modulo è dispari.
- L'ordine di modulo è pari e
Usando la teoria elementare dei numeri si può dimostrare che, per una scelta casuale di con probabilità almeno nessuno di questi eventi si verifica. In realtà, la probabilità che uno dei due eventi si verifichi è al più dove è il numero di fattori primi distinti di ed è per questo che è necessaria l'assunzione che non sia una potenza di primo. (Anche l'assunzione che sia dispari è necessaria affinché questo fatto sia vero.)
Questo significa che ogni esecuzione ha almeno il 50% di probabilità di dividere Pertanto, se eseguiamo l'algoritmo volte, scegliendo casualmente ogni volta, riusciremo a dividere con probabilità almeno
L'idea di base dell'algoritmo è la seguente. Se abbiamo una scelta di per cui l'ordine di modulo è pari, allora è un intero e possiamo considerare i numeri
Usando la formula concludiamo che
Ora, sappiamo che per definizione dell'ordine — il che equivale a dire che divide esattamente Ciò significa che divide esattamente il prodotto
Affinché questo sia vero, tutti i fattori primi di devono essere anche fattori primi di o (o di entrambi) — e per una selezione casuale di risulta improbabile che tutti i fattori primi di dividano uno dei termini e nessuno divida l'altro. Altrimenti, fintanto che alcuni dei fattori primi di dividono il primo termine e alcuni dividono il secondo termine, saremo in grado di trovare un fattore non banale di calcolando il MCD con il primo termine.