Algoritmo di Shor
Ora ci occuperemo del problema della fattorizzazione dei numeri interi 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 dei numeri interi. Shor non ha descritto il suo algoritmo specificamente in termini di stima di fase, ma è un modo naturale e intuitivo per spiegarne il funzionamento.
Inizieremo discutendo un problema intermedio noto come problema di ricerca dell'ordine e vedremo come la stima di fase fornisca una soluzione a questo problema. Vedremo poi come una soluzione efficiente al problema della ricerca degli ordini ci dia una soluzione efficiente al problema della fattorizzazione degli interi. (Quando la soluzione di un problema fornisce una soluzione a un altro problema di questo tipo, si dice che il secondo problema si riduce al primo, quindi in questo caso stiamo riducendo la fattorizzazione degli interi alla ricerca di ordini) Questa seconda parte dell'algoritmo di Shor non fa affatto uso dell'informatica quantistica, ma è completamente classica. Il calcolo quantistico è necessario solo per risolvere la ricerca di ordini.
Il problema della ricerca degli ordini
Alcuni concetti fondamentali di teoria dei numeri
Per spiegare il problema della ricerca dell'ordine e il modo in cui può essere risolto utilizzando la stima di fase, sarà utile iniziare con un paio di concetti di base della teoria dei numeri e introdurre alcune notazioni utili lungo il percorso.
Per cominciare, per ogni dato numero intero positivo , definiamo l’insieme nel modo seguente.
Per esempio, e così via.
Si tratta di insiemi di numeri, ma possiamo considerarli come qualcosa di più di semplici insiemi. In particolare, possiamo considerare le operazioni aritmetiche su , come l'addizione e la moltiplicazione — e se concordiamo di considerare sempre i risultati modulo (cioè, dividere per e considerare il resto come risultato), rimarremo sempre all'interno di questo insieme quando eseguiamo queste operazioni. Le due operazioni specifiche dell’addizione e della moltiplicazione, entrambe considerate modulo , trasformano in un anello, che è un tipo di oggetto di fondamentale importanza in algebra.
Ad esempio, e sono elementi di , e se li moltiplichiamo tra loro otteniamo , che, diviso per , lascia un resto pari a . A volte lo esprimiamo come segue.
Ma possiamo anche scrivere semplicemente “ ”, a condizione che sia stato chiarito che stiamo lavorando in “ ”, proprio per mantenere la nostra notazione il più semplice possibile.
A titolo di esempio, ecco le tabelline dell’addizione e della moltiplicazione per .
Tra gli elementi di , gli elementi che soddisfano sono speciali. Spesso l'insieme che contiene questi elementi viene indicato con un asterisco, in questo modo.
Se concentriamo la nostra attenzione sull'operazione della moltiplicazione, l'insieme forma un gruppo — in particolare un gruppo abeliano — che rappresenta un altro importante tipo di oggetto in algebra. È un fatto fondamentale relativo a questi insiemi (e ai gruppi finiti in generale) che, se si sceglie un elemento qualsiasi e si moltiplica ripetutamente per se stesso, alla fine si otterrà sempre il numero .
Come primo esempio, prendiamo . Si ha che poiché , e se moltiplichiamo per se stesso otteniamo , come conferma la tabella sopra riportata.
Come secondo esempio, prendiamo . Se esaminiamo i numeri da a , quelli con MCD pari a con sono i seguenti.
Per ciascuno di questi elementi, è possibile elevare tale numero a una potenza intera positiva per ottenere un numero di tipo “ ”. Ecco le potenze minime per le quali ciò è possibile:
Naturalmente, per tutte queste equazioni lavoriamo all'interno di , che non ci siamo presi la briga di scrivere: lo consideriamo implicito per non appesantire le cose. Continueremo a farlo nel resto della lezione.
Descrizione del problema e collegamento alla stima di fase
Ora possiamo enunciare il problema della ricerca dell'ordine.
Input: numeri interi positivi e soddisfacenti \ Output: il più piccolo intero positivo tale che
In alternativa, utilizzando la notazione appena introdotta, ci viene dato un numero e dobbiamo trovare il più piccolo numero intero positivo tale che . Questo numero è chiamato ordine di modulo .
Per collegare il problema della ricerca dell'ordine alla stima di fase, consideriamo l'operazione definita su un sistema i cui stati classici corrispondono a , dove si moltiplica per un elemento fisso .
Per chiarezza, stiamo effettuando la moltiplicazione in un sistema di coordinate di tipo “ ”, quindi è implicito che stiamo calcolando il prodotto modulo “ ” all’interno del ket che si trova sul lato destro dell’equazione.
Ad esempio, se consideriamo e , l’azione di sulla base standard è la seguente.
Si tratta di un'operazione unitaria, purché ; essa rimescola gli elementi della base standard , quindi, come matrice, è una matrice di permutazione. Dalla sua definizione risulta evidente che questa operazione è deterministica, e un modo semplice per dimostrare che è invertibile consiste nel considerare l’ordine di modulo , e nel riconoscere che l’inverso di è .
C'è un altro modo di concepire l'inverso che non richiede alcuna conoscenza dell' o (che, dopotutto, è proprio ciò che stiamo cercando di calcolare). Per ogni elemento esiste sempre un elemento unico che soddisfa . Indichiamo questo elemento con , che può essere calcolato in modo efficiente; un’estensione dell’algoritmo di Euclide per il MCD lo fa con un costo quadratico in . E quindi
Quindi, l'operazione è sia deterministica che invertibile. Ciò implica che è descritto da una matrice di permutazione e quindi è unitario.
Consideriamo ora gli autovettori e gli autovalori dell'operazione , supponendo che . Come appena dimostrato, questa supposizione ci indica che è unitaria.
Esistono autovalori di , tra cui potrebbe figurare lo stesso autovalore ripetuto più volte, e in generale vi è una certa libertà nella scelta dei vettori propri corrispondenti — ma non sarà necessario considerare tutte le possibilità. Cominciamo in modo semplice e identifichiamo un solo vettore proprio di .
Il numero è l'ordine di modulo , qui e per tutto il resto della lezione. L'autovalore associato a questo autovettore è poiché rimane invariato quando lo moltiplichiamo per .
Ciò accade perché , quindi ogni stato della base standard viene spostato a per , mentre torna a . In parole povere, è come se stessimo mescolando lentamente , ma poiché è già completamente mescolato, non cambia nulla.
Ecco un altro esempio di vettore proprio di . Questo, in particolare, risulta più interessante nel contesto della determinazione dell'ordine e della stima di fase.
In alternativa, possiamo scrivere questo vettore utilizzando una sommatoria come segue.
Qui vediamo che il numero complesso emerge spontaneamente, a causa del modo in cui funziona la moltiplicazione per modulo . Questa volta l'autovalore corrispondente è . Per verificarlo, possiamo innanzitutto effettuare i seguenti calcoli.
Quindi, poiché e , si ha che
quindi .
Seguendo lo stesso ragionamento, possiamo individuare ulteriori coppie di vettori propri e autovalori per . Per qualsiasi scelta di , si ha che
è un vettore proprio di il cui valore proprio corrispondente è .
Esistono altri vettori propri di , ma non è necessario occuparsene: ci concentreremo esclusivamente sui vettori propri che abbiamo appena individuato.
Ricerca dell'ordine tramite 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 non solo con un circuito quantistico, ma anche , , e così via, spingendoci quanto necessario per ottenere una stima sufficientemente precisa dalla procedura di stima della fase. Qui spiegheremo come farlo e in seguito stabiliremo esattamente quale livello di precisione sia necessario.
Cominciamo con l'operazione " " di per sé. Naturalmente, dato che stiamo lavorando con il modello del circuito quantistico, useremo la notazione binaria per codificare i numeri compresi tra e . Il numero più grande che dobbiamo codificare è , quindi il numero di bit di cui abbiamo bisogno è
Ad esempio, se , abbiamo . Ecco come si presenta la codifica degli elementi di come stringhe binarie di lunghezza .
Ed ecco una definizione precisa di come sia definito come un'operazione -qubit.
Il punto è che, sebbene ci interessi solo come funziona l’ e per , dobbiamo comunque specificare come funziona per i restanti stati della base standard — e dobbiamo farlo in modo tale da ottenere comunque un’operazione unitaria. Ciò si ottiene definendo l’ e in modo tale che non abbia alcun effetto sugli stati rimanenti della base standard.
Utilizzando gli algoritmi per la moltiplicazione e la divisione di numeri interi illustrati nella lezione precedente, insieme alla metodologia per la loro implementazione reversibile e senza "garbage", possiamo costruire un circuito quantistico che esegua l'operazione " ", per qualsiasi scelta di " ", con un costo pari a " ". Ecco un modo per farlo.
- Costruire un circuito per eseguire l'operazione
Dove
utilizzando il metodo descritto nella lezione precedente. Questo ci dà un circuito di dimensione .
-
Scambiare i due sistemi -qubit utilizzando le porte di scambio per scambiare i qubit individualmente.
-
In modo simile al primo passo, costruite un circuito per l'operazione
dove è l'inverso di in .
Inizializzando i qubit del fondo e componendo i tre passaggi, otteniamo questa trasformazione:
Il metodo richiede qubit dello spazio di lavoro, ma questi vengono riportati al loro stato iniziale al termine del processo, il che ci permette di utilizzare questi circuiti per la stima di fase. Il costo totale del circuito che otteniamo è o.
Per eseguire , , e così via, possiamo utilizzare esattamente lo stesso metodo, con la sola differenza di sostituire con , , e così via, come elementi di . Cioè, per qualsiasi potenza scegliamo, possiamo creare un circuito per non iterando volte il circuito per , ma invece calcolando e poi utilizzando il circuito per .
Il calcolo delle potenze corrisponde al problema dell'esponenziazione modulare menzionato nella lezione precedente. Questo calcolo può essere effettuato in modo classico, utilizzando l'algoritmo per l'esponenziazione modulare menzionato nella lezione precedente (spesso denominato " algoritmo delle potenze" nella teoria computazionale dei numeri). Infatti, ci servono solo le potenze di power-of-2 relative a , in particolare , e possiamo ottenere queste potenze elevando al quadrato volte in modo iterativo. Ogni elevazione al quadrato può essere eseguita da un circuito booleano di dimensione .
In sostanza, ciò che stiamo effettivamente facendo qui è trasferire il problema di iterare su per un numero di volte pari a a un calcolo classico efficiente. Ed è una fortuna che ciò sia possibile! Se si sceglie un circuito quantistico a caso nel problema della stima di fase, è improbabile che ciò sia possibile — e in tal caso il costo risultante per la stima di fase cresce in modo esponenziale con il numero di qubit di controllo .
Soluzione data un vettore proprio conveniente
Per capire come risolvere il problema della determinazione dell’ordine utilizzando la stima di fase, partiamo dal presupposto che si esegua la procedura di stima di fase sull’operazione utilizzando l’autovettore . Ottenere questo autovettore non è facile, a quanto pare, quindi la storia non finisce qui — ma è utile partire da qui.
L'autovalore di corrispondente all'autovettore è
Cioè, per . Quindi, se eseguiamo la procedura di stima di fase su utilizzando l’autovettore , otterremo un’approssimazione di . Calcolando il reciproco saremo in grado di ricavare — a condizione che la nostra approssimazione sia sufficientemente accurata.
Più in dettaglio, quando eseguiamo la procedura di stima della fase utilizzando i qubit di controll , otteniamo un numero . Prendiamo quindi come valore stimato per , che nel caso in esame è . Per determinare il valore di a partire da questa approssimazione, la cosa più naturale da fare è calcolare il reciproco della nostra approssimazione e arrotondare al numero intero più vicino.
Ad esempio, supponiamo che e che si esegua la stima di fase su con il vettore proprio utilizzando bit di controllo. La migliore approssimazione a -bit di è , e abbiamo una probabilità piuttosto elevata (circa in questo caso) di ottenere il risultato dalla stima di fase. Abbiamo
e arrotondando al numero intero più vicino si ottiene , che è la risposta corretta.
D'altra parte, se non utilizziamo una precisione sufficiente, potremmo non ottenere la risposta corretta. Ad esempio, se consideriamo un numero di qubit di controllo pari a e nella stima di fase, potremmo ottenere la migliore approssimazione a bit di , ovvero . Calcolando il reciproco si ottiene
e arrotondando al numero intero più vicino si ottiene un risultato errato pari a .
Quindi, quanta precisione ci serve per ottenere la risposta giusta? Sappiamo che l'ordine è un numero intero e, intuitivamente, ciò di cui abbiamo bisogno è una precisione sufficiente per distinguere dalle possibilità vicine, tra cui e . Il numero più vicino a di cui dobbiamo preoccuparci è , e la distanza tra questi due numeri è
Quindi, se vogliamo assicurarci di non confondere con , è sufficiente utilizzare una precisione tale da garantire che la migliore approssimazione di sia più vicina a che a . Se utilizziamo una precisione tale che
in modo che l'errore sia inferiore alla metà della distanza tra e ; in tal caso, risulterà più vicino a che a qualsiasi altra possibilità, comprese e .
Possiamo verificarlo come segue. Supponiamo che
per che soddisfa
Prendendo il reciproco si ottiene
Massimizzando al numeratore e minimizzando al denominatore, possiamo stabilire quanto siamo lontani da come segue.
Mancano meno di a , quindi, come previsto, arrotondando otterremo .
Sfortunatamente, poiché non sappiamo ancora cosa sia , non possiamo usarlo per dirci di quanta precisione abbiamo bisogno. Si può invece utilizzare il fatto che deve essere più piccolo di per assicurarsi di utilizzare una precisione sufficiente. In particolare, se utilizziamo un'accuratezza sufficiente a garantire che la migliore approssimazione a soddisfi
allora avremo una precisione sufficiente per determinare correttamente quando prendiamo il reciproco. L'utilizzo di garantisce un'alta probabilità di ottenere una stima con questa precisione con il metodo descritto in precedenza. (L'assunzione di è sufficiente se ci sentiamo a nostro agio con un limite inferiore del 40% sulla probabilità di successo)
Soluzione generale
Come abbiamo appena visto, se disponiamo del vettore proprio di , possiamo determinare tramite la stima di fase, a condizione di utilizzare un numero sufficiente di qubit di controllo per eseguire questa operazione con adeguata precisione. Purtroppo non è facile ottenere l'autovettore , quindi dobbiamo capire come procedere.
Supponiamo per un attimo di procedere esattamente come sopra, ma sostituendo l'autovettore al posto di , per qualsiasi scelta di che decidiamo di prendere in considerazione. Il risultato che otterremo dalla procedura di stima di fase sarà un'approssimazione
Partendo dal presupposto che non conosciamo né né , questo potrebbe permetterci o meno di identificare . Ad esempio, se , otterremo un'approssimazione di , che purtroppo non ci dice nulla. Si tratta, tuttavia, di un caso insolito; per altri valori di , potremo almeno ricavare qualche informazione su .
Possiamo utilizzare un algoritmo noto come algoritmo della frazione continua per trasformare la nostra approssimazione in frazioni vicine, inclusa se l'approssimazione è sufficientemente buona. Non spiegheremo qui l'algoritmo della frazione continua. Invece, ecco una dichiarazione di un fatto noto su questo algoritmo.
Dati un numero intero e un numero reale , esiste al massimo una scelta di numeri interi tali che e soddisfino . Dati e , l' algoritmo delle frazioni continue trova e , oppure segnala che non esistono. Questo algoritmo può essere implementato come circuito booleano di dimensione .
Se disponiamo di un'approssimazione molto vicina, , a , ed eseguiamo l'algoritmo delle frazioni continue per e , otterremo e , come descritto nel fatto. Un'analisi dei fatti ci permette di concludere che
Si noti in particolare che non si imparano necessariamente le espressioni “ ” e “ ”, ma solo “ ” nella forma più semplice.
Ad esempio, e come abbiamo già notato, non impareremo nulla da . Ma questo è l'unico caso in cui ciò accade su . 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 siamo in grado di imparare e per per , scelti in modo uniformemente casuale, allora è molto probabile che riusciremo a recuperare già dopo pochi campioni. In particolare, se la nostra ipotesi per è il minimo comune multiplo di tutti i valori del denominatore che osserviamo, avremo ragione con elevata probabilità. Intuitivamente, alcuni valori di non sono validi perché hanno fattori comuni con , e tali fattori comuni ci sfuggono quando analizziamo e . Tuttavia, è improbabile che scelte casuali di riescano a nascondere a lungo i fattori di , e la probabilità di non indovinare correttamente calcolando il minimo comune multiplo dei denominatori osservati diminuisce in modo esponenziale all’aumentare del numero di campioni.
Rimane da affrontare il problema di come mettere le mani su un autovettore di su cui eseguire la procedura di stima della fase. In realtà non abbiamo bisogno di crearli!
Quello che faremo invece è applicare la procedura di stima di fase allo stato , ovvero la codifica binaria a bit del numero , al posto di un vettore proprio di . Finora abbiamo parlato solo di applicare la procedura di stima di fase a un particolare vettore proprio, ma nulla ci impedisce di applicare la procedura a uno stato di ingresso che non sia un vettore proprio di , ed è proprio quello che stiamo facendo qui con lo stato . (Questo non è un vettore proprio di a meno che , il che non è un caso che ci interessa.)
La ragione per cui si sceglie lo stato al posto di un autovettore di è che la seguente equazione è vera.
Un modo per verificare questa equazione è quello di confrontare i prodotti interni dei due lati con ogni stato base standard, utilizzando le formule menzionate in precedenza nella lezione per aiutare a valutare i risultati per il lato destro. Di conseguenza, otterremo esattamente gli stessi risultati di misurazione che avremmo ottenuto se avessimo scelto in modo uniformemente casuale e utilizzato come autovalore.
Più in dettaglio, immaginiamo di eseguire la procedura di stima di fase utilizzando lo stato al posto di uno degli autovettori . Una volta eseguita la trasformata di Fourier quantistica inversa, otteniamo lo stato
Dove
Il vettore rappresenta lo stato dei qubit top dopo che su di essi è stata eseguita l'inversa della trasformata quantistica di Fourier.
Quindi, in virtù del fatto che è un insieme ortonormale, troviamo che una misura dei qubit superiori produce un'approssimazione al valore dove è scelto in modo uniforme e casuale produce un'approssimazione al valore dove è scelto uniformemente a caso. Come abbiamo già detto, questo ci permette di imparare con un alto grado di confidenza dopo diverse esecuzioni indipendenti, che era il nostro obiettivo.
Costo totale
Il costo per l'implementazione di ogni operazione unitaria controllata è pari a . Le operazioni unitarie controllate sono e abbiamo , quindi il costo totale delle operazioni unitarie controllate è pari a . Inoltre, abbiamo porte di Hadamard (che contribuiscono al costo con ) e la trasformata di Fourier quantistica inversa contribuisce al costo con . Pertanto, il costo delle operazioni unitarie controllate incide in modo determinante sul costo dell’intera procedura — che risulta quindi pari a .
Oltre al circuito quantistico vero e proprio, ci sono alcuni calcoli classici che devono essere eseguiti nel corso del processo. Ciò comprende 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 pari a .
Come è tipico, tutti questi limiti possono essere migliorati utilizzando algoritmi asintoticamente veloci; questi limiti presuppongono l'utilizzo di algoritmi standard per le operazioni aritmetiche di base.
Factoring su ordine trovato
L'ultima cosa da discutere è il modo in cui la soluzione del problema della ricerca dell'ordine ci aiuta a fattorizzare. Questa parte è completamente classica e non ha nulla a che fare con l'informatica quantistica.
Ecco l'idea di base. Vogliamo fattorizzare il numero , e possiamo farlo in modo ricorsivo. Nello specifico, possiamo concentrarci sul compito di scomporre , il che significa trovare due numeri interi qualsiasi tali che . Ciò non è possibile se è un numero primo, ma possiamo prima verificare in modo efficiente se è primo utilizzando un algoritmo di verifica della primalità e, se non è primo, proveremo a scomporlo. Una volta scomposto , possiamo semplicemente applicare la ricorsione su e fino a quando tutti i nostri fattori non saranno primi e otterremo la scomposizione in fattori primi di .
Dividere i numeri interi pari è facile: basta stampare e .
È anche facile scomporre potenze perfette, ovvero numeri della forma per interi , semplicemente approssimando le radici , , e così via, e verificando gli interi vicini come possibili candidati per . Non è necessario andare oltre i passi di questa sequenza, poiché a quel punto la radice scende al di sotto di e non rivelerà ulteriori candidati.
È positivo che possiamo fare entrambe le cose, perché la ricerca dell’ordine non ci aiuterà a scomporre i numeri pari né nel caso delle potenze di numeri primi, dove il numero risulta essere primo. Se però è dispari e non è una potenza di un numero primo, la determinazione dell’ordine ci permette di scomporre .
-
Scegli a caso .
-
Calcola .
-
Se , allora visualizza e e termina. Altrimenti, passa alla fase successiva sapendo che .
-
Sia l'ordine di modulo . (È qui che ci serve la ricerca degli ordini.)
-
Se è pari:
5.1 Calcola modulo
5.2
Calcola . 5.3
Se , allora stampa e e termina. -
Se si giunge a questo punto, significa che l’algoritmo non è riuscito a trovare un fattore di .
L'esecuzione di questo algoritmo potrebbe non riuscire a trovare un fattore di . Nello specifico, ciò accade in due casi:
- L'ordine di modulo è dispari.
- L'ordine di modulo è pari e .
Ricorrendo alla teoria elementare dei numeri, si può dimostrare che, per una scelta casuale di un numero , con probabilità almeno pari a nessuno dei due eventi si verifica. Infatti, la probabilità che si verifichi uno dei due eventi è al massimo pari a , dove è il numero di fattori primi distinti di , motivo per cui è necessaria l’ipotesi che non sia una potenza di un numero primo. (Affinché questo fatto sia vero, è necessario anche che sia dispari.)
Ciò significa che ogni esecuzione ha almeno il 50% di probabilità di suddividere . Pertanto, se eseguiamo l'algoritmo volte, scegliendo casualmente ogni volta, riusciremo a suddividere con una probabilità di almeno .
L'idea di base dell'algoritmo è la seguente. Se abbiamo una scelta di per la quale l'ordine di modulo è pari, allora è un intero e possiamo considerare i numeri
Utilizzando la formula , si deduce che
Ora, sappiamo che per definizione dell’ordine — il che equivale a dire che divide esattamente . Ciò significa che divide esattamente il prodotto
Perché 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, se 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 GCD con il primo termine.