Vai al contenuto principale

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 N,N, definiamo l'insieme ZN\mathbb{Z}_N come segue.

ZN={0,1,,N1}\mathbb{Z}_N = \{0,1,\ldots,N-1\}

Ad esempio, Z1={0},  \mathbb{Z}_1 = \{0\},\; Z2={0,1},  \mathbb{Z}_2 = \{0,1\},\; Z3={0,1,2},  \mathbb{Z}_3 = \{0,1,2\},\; 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 ZN\mathbb{Z}_N come l'addizione e la moltiplicazione — e se concordiamo di prendere sempre i risultati modulo NN (cioè, dividiamo per NN 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 N,N, trasformano ZN\mathbb{Z}_N in un anello, che è un tipo di oggetto fondamentalmente importante in algebra.

Ad esempio, 33 e 55 sono elementi di Z7,\mathbb{Z}_7, e se li moltiplichiamo otteniamo 35=15,3\cdot 5 = 15, che lascia un resto di 11 quando diviso per 7.7. A volte lo esprimiamo come segue.

351  (mod 7)3 \cdot 5 \equiv 1 \; (\textrm{mod } 7)

Ma possiamo anche scrivere semplicemente 35=1,3 \cdot 5 = 1, purché sia chiaro che stiamo lavorando in Z7,\mathbb{Z}_7, solo per mantenere la notazione il più semplice possibile.

Come esempio, ecco le tavole di addizione e moltiplicazione per Z6.\mathbb{Z}_6.

+012345001234511234502234501334501244501235501234012345000000010123452024024303030340420425054321\begin{array}{c|cccccc} + & 0 & 1 & 2 & 3 & 4 & 5 \\\hline 0 & 0 & 1 & 2 & 3 & 4 & 5 \\ 1 & 1 & 2 & 3 & 4 & 5 & 0 \\ 2 & 2 & 3 & 4 & 5 & 0 & 1 \\ 3 & 3 & 4 & 5 & 0 & 1 & 2 \\ 4 & 4 & 5 & 0 & 1 & 2 & 3 \\ 5 & 5 & 0 & 1 & 2 & 3 & 4 \\ \end{array} \qquad \begin{array}{c|cccccc} \cdot & 0 & 1 & 2 & 3 & 4 & 5 \\\hline 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 1 & 0 & 1 & 2 & 3 & 4 & 5 \\ 2 & 0 & 2 & 4 & 0 & 2 & 4 \\ 3 & 0 & 3 & 0 & 3 & 0 & 3 \\ 4 & 0 & 4 & 2 & 0 & 4 & 2 \\ 5 & 0 & 5 & 4 & 3 & 2 & 1 \\ \end{array}

Tra gli NN elementi di ZN,\mathbb{Z}_N, gli elementi aZNa\in\mathbb{Z}_N che soddisfano gcd(a,N)=1\gcd(a,N) = 1 sono speciali. Spesso l'insieme contenente questi elementi è denotato con un asterisco come segue.

ZN={aZN:gcd(a,N)=1}\mathbb{Z}_N^{\ast} = \{a\in \mathbb{Z}_N : \gcd(a,N) = 1\}

Se focalizziamo la nostra attenzione sull'operazione di moltiplicazione, l'insieme ZN\mathbb{Z}_N^{\ast} 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 aZNa\in\mathbb{Z}_N^{\ast} e moltiplichiamo ripetutamente aa per se stesso, otterremo sempre alla fine il numero 1.1.

Come primo esempio, prendiamo N=6.N=6. Abbiamo che 5Z65\in\mathbb{Z}_6^{\ast} perché gcd(5,6)=1,\gcd(5,6) = 1, e se moltiplichiamo 55 per se stesso otteniamo 1,1, come conferma la tavola sopra.

52=1(lavorando all’interno di Z6)5^2 = 1 \quad \text{(lavorando all'interno di $\mathbb{Z}_6$)}

Come secondo esempio, prendiamo N=21.N = 21. Se passiamo in rassegna i numeri da 00 a 20,20, quelli con MCD uguale a 11 con 2121 sono i seguenti.

Z21={1,2,4,5,8,10,11,13,16,17,19,20}\mathbb{Z}_{21}^{\ast} = \{1,2,4,5,8,10,11,13,16,17,19,20\}

Per ciascuno di questi elementi, è possibile elevare quel numero a una potenza intera positiva per ottenere 1.1. Ecco le potenze più piccole per cui questo funziona:

11=182=1163=126=1106=1176=143=1116=1196=156=1132=1202=1\begin{array}{ccc} 1^{1} = 1 \quad & 8^{2} = 1 \quad & 16^{3} = 1 \\[1mm] 2^{6} = 1 \quad & 10^{6} = 1 \quad & 17^{6} = 1 \\[1mm] 4^{3} = 1 \quad & 11^{6} = 1 \quad & 19^{6} = 1 \\[1mm] 5^{6} = 1 \quad & 13^{2} = 1 \quad & 20^{2} = 1 \end{array}

Naturalmente stiamo lavorando all'interno di Z21\mathbb{Z}_{21} 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.

Ricerca dell'ordine

Input: interi positivi NN e aa che soddisfano gcd(N,a)=1\gcd(N,a) = 1
Output: il più piccolo intero positivo rr tale che ar1a^r \equiv 1 (mod N)(\textrm{mod } N)

In alternativa, in termini della notazione appena introdotta, ci vengono dati aZN,a \in \mathbb{Z}_N^{\ast}, e stiamo cercando il più piccolo intero positivo rr tale che ar=1.a^r = 1. Questo numero rr è chiamato ordine di aa modulo N.N.

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 ZN,\mathbb{Z}_N, dove moltiplichiamo per un elemento fisso aZN.a\in\mathbb{Z}_N^{\ast}.

Max=ax(per ogni xZN)M_a \vert x\rangle = \vert ax \rangle \qquad \text{(per ogni $x\in\mathbb{Z}_N$)}

Per essere chiari, stiamo eseguendo la moltiplicazione in ZN,\mathbb{Z}_N, quindi è implicito che stiamo prendendo il prodotto modulo NN all'interno del ket sul lato destro dell'equazione.

Ad esempio, se prendiamo N=15N = 15 e a=2,a=2, allora l'azione di M2M_2 sulla base standard {0,,14}\{\vert 0\rangle,\ldots,\vert 14\rangle\} è la seguente.

M20=0M25=10M210=5M21=2M26=12M211=7M22=4M27=14M212=9M23=6M28=1M213=11M24=8M29=3M214=13\begin{array}{ccc} M_{2} \vert 0 \rangle = \vert 0\rangle \quad & M_{2} \vert 5 \rangle = \vert 10\rangle \quad & M_{2} \vert 10 \rangle = \vert 5\rangle \\[1mm] M_{2} \vert 1 \rangle = \vert 2\rangle \quad & M_{2} \vert 6 \rangle = \vert 12\rangle \quad & M_{2} \vert 11 \rangle = \vert 7\rangle \\[1mm] M_{2} \vert 2 \rangle = \vert 4\rangle \quad & M_{2} \vert 7 \rangle = \vert 14\rangle \quad & M_{2} \vert 12 \rangle = \vert 9\rangle \\[1mm] M_{2} \vert 3 \rangle = \vert 6\rangle \quad & M_{2} \vert 8 \rangle = \vert 1\rangle \quad & M_{2} \vert 13 \rangle = \vert 11\rangle \\[1mm] M_{2} \vert 4 \rangle = \vert 8\rangle \quad & M_{2} \vert 9 \rangle = \vert 3\rangle \quad & M_{2} \vert 14 \rangle = \vert 13\rangle \end{array}

Questa è un'operazione unitaria purché gcd(a,N)=1;\gcd(a,N)=1; permuta gli elementi della base standard {0,,N1},\{\vert 0\rangle,\ldots,\vert N-1\rangle\}, 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 rr di aa modulo N,N, e riconoscere che l'inverso di MaM_a è Mar1.M_a^{r-1}.

Mar1Ma=Mar=Mar=M1=IM_a^{r-1} M_a = M_a^r = M_{a^r} = M_1 = \mathbb{I}

C'è un altro modo per pensare all'inverso che non richiede alcuna conoscenza di rr (che, dopotutto, è ciò che stiamo cercando di calcolare). Per ogni elemento aZNa\in\mathbb{Z}_N^{\ast} esiste sempre un elemento unico bZNb\in\mathbb{Z}_N^{\ast} che soddisfa ab=1.ab=1. Denotiamo questo elemento bb con a1,a^{-1}, e può essere calcolato in modo efficiente; un'estensione dell'algoritmo di Euclide per il MCD lo fa con costo quadratico in lg(N).\operatorname{lg}(N). E quindi

Ma1Ma=Ma1a=M1=I.M_{a^{-1}} M_a = M_{a^{-1}a} = M_1 = \mathbb{I}.

Quindi, l'operazione MaM_a è 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 Ma,M_a, assumendo che aZN.a\in\mathbb{Z}_N^{\ast}. Come appena argomentato, questa assunzione ci dice che MaM_a è unitaria.

Ci sono NN autovalori di Ma,M_a, 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 Ma.M_a.

ψ0=1+a++ar1r\vert \psi_0 \rangle = \frac{\vert 1 \rangle + \vert a \rangle + \cdots + \vert a^{r-1} \rangle}{\sqrt{r}}

Il numero rr è l'ordine di aa modulo N,N, qui e nel resto della lezione. L'autovalore associato a questo autovettore è 11 perché non viene modificato quando moltiplichiamo per a.a.

Maψ0=a++ar1+arr=a++ar1+1r=ψ0M_a \vert \psi_0 \rangle = \frac{\vert a \rangle + \cdots + \vert a^{r-1} \rangle + \vert a^r \rangle}{\sqrt{r}} = \frac{\vert a \rangle + \cdots + \vert a^{r-1} \rangle + \vert 1 \rangle}{\sqrt{r}} = \vert \psi_0 \rangle

Questo accade perché ar=1,a^r = 1, quindi ogni stato della base standard ak\vert a^k \rangle viene spostato in ak+1\vert a^{k+1} \rangle per kr1,k\leq r-1, e ar1\vert a^{r-1} \rangle viene riportato a 1.\vert 1\rangle. In modo informale, è come se stessimo mescolando lentamente ψ0,\vert \psi_0 \rangle, ma è già completamente mescolato quindi nulla cambia.

Ecco un altro esempio di autovettore di Ma.M_a. Questo è più interessante nel contesto della ricerca dell'ordine e della stima di fase.

ψ1=1+ωr1a++ωr(r1)ar1r\vert \psi_1 \rangle = \frac{\vert 1 \rangle + \omega_r^{-1} \vert a \rangle + \cdots + \omega_r^{-(r-1)}\vert a^{r-1} \rangle}{\sqrt{r}}

In alternativa, possiamo scrivere questo vettore usando una sommatoria come segue.

ψ1=1rk=0r1ωrkak\vert \psi_1 \rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \omega_r^{-k} \vert a^k \rangle

Qui vediamo il numero complesso ωr=e2πi/r\omega_r = e^{2\pi i/r} apparire naturalmente, a causa del modo in cui la moltiplicazione per aa funziona modulo N.N. Questa volta l'autovalore corrispondente è ωr.\omega_r. Per verificarlo, possiamo prima calcolare come segue.

Maψ1=1rk=0r1ωrkMaak=1rk=0r1ωrkak+1=1rk=1rωr(k1)ak=1rωrk=1rωrkakM_a \vert \psi_1 \rangle = \frac{1}{\sqrt{r}}\sum_{k = 0}^{r-1} \omega_r^{-k} M_a\vert a^k \rangle = \frac{1}{\sqrt{r}}\sum_{k = 0}^{r-1} \omega_r^{-k} \vert a^{k+1} \rangle = \frac{1}{\sqrt{r}}\sum_{k = 1}^{r} \omega_r^{-(k - 1)} \vert a^{k} \rangle = \frac{1}{\sqrt{r}}\omega_r \sum_{k = 1}^{r} \omega_r^{-k} \vert a^{k} \rangle

Poi, poiché ωrr=1=ωr0\omega_r^{-r} = 1 = \omega_r^0 e ar=1=a0,\vert a^r \rangle = \vert 1\rangle = \vert a^0\rangle, vediamo che

1rk=1rωrkak=1rk=0r1ωrkak=ψ1,\frac{1}{\sqrt{r}}\sum_{k = 1}^{r} \omega_r^{-k} \vert a^{k} \rangle = \frac{1}{\sqrt{r}}\sum_{k = 0}^{r-1} \omega_r^{-k} \vert a^k \rangle = \vert\psi_1\rangle,

quindi Maψ1=ωrψ1.M_a \vert\psi_1\rangle = \omega_r \vert\psi_1\rangle.

Usando lo stesso ragionamento, possiamo identificare ulteriori coppie autovettore/autovalore per Ma.M_a. Per qualsiasi scelta di j{0,,r1}j\in\{0,\ldots,r-1\} abbiamo che

ψj=1rk=0r1ωrjkak\vert \psi_j \rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \omega_r^{-jk} \vert a^k \rangle

è un autovettore di MaM_a il cui autovalore corrispondente è ωrj.\omega_r^j.

Maψj=ωrjψjM_a \vert \psi_j \rangle = \omega_r^j \vert \psi_j \rangle

Ci sono altri autovettori di Ma,M_a, ma non dobbiamo preoccuparcene — ci concentreremo esclusivamente sugli autovettori ψ0,,ψr1\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle 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 aZN,a\in\mathbb{Z}_N^{\ast}, possiamo applicare la procedura di stima di fase all'operazione Ma.M_a.

Per farlo, dobbiamo implementare in modo efficiente con un circuito quantistico non solo Ma,M_a, ma anche Ma2,M_a^2, Ma4,M_a^4, Ma8,M_a^8, 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 MaM_a da sola. Naturalmente, poiché lavoriamo con il modello del circuito quantistico, utilizzeremo la notazione binaria per codificare i numeri compresi tra 00 e N1.N-1. Il numero più grande che dobbiamo codificare è N1,N-1, quindi il numero di bit necessari è

n=lg(N1)=log(N1)+1.n = \operatorname{lg}(N-1) = \lfloor \log(N-1) \rfloor + 1.

Per esempio, se N=21N = 21 abbiamo n=lg(N1)=5.n = \operatorname{lg}(N-1) = 5. Ecco come appare la codifica degli elementi di Z21\mathbb{Z}_{21} come stringhe binarie di lunghezza 5.5.

0000001000012010100\begin{gathered} 0 \mapsto 00000\\[1mm] 1 \mapsto 00001\\[1mm] \vdots\\[1mm] 20 \mapsto 10100 \end{gathered}

E ora, ecco una definizione precisa di come MaM_a è definita come operazione su nn qubit.

Max={ax  (mod  N)0x<NxNx<2nM_a \vert x\rangle = \begin{cases} \vert ax \; (\textrm{mod}\;N)\rangle & 0\leq x < N\\[1mm] \vert x\rangle & N\leq x < 2^n \end{cases}

Il punto è che, sebbene ci interessi solo il funzionamento di MaM_a per 0,,N1,\vert 0\rangle,\ldots,\vert N-1\rangle, dobbiamo comunque specificare come si comporta per i restanti 2nN2^n - N stati della base standard — e dobbiamo farlo in modo da ottenere comunque un'operazione unitaria. Definire MaM_a 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 Ma,M_a, per qualsiasi scelta di aZN,a\in\mathbb{Z}_N^{\ast}, con costo O(n2).O(n^2). Ecco un modo in cui questo può essere fatto.

  1. Costruire un circuito per eseguire l'operazione

    xyxyfa(x)\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \vert y \oplus f_a(x)\rangle

    dove

    fa(x)={ax  (mod  N)0x<NxNx<2nf_a(x) = \begin{cases} ax \; (\textrm{mod}\;N) & 0\leq x < N\\[1mm] x & N\leq x < 2^n \end{cases}

    usando il metodo descritto nella lezione precedente. Questo ci fornisce un circuito di dimensione O(n2).O(n^2).

  2. Scambiare i due sistemi da nn qubit usando nn swap gate per scambiare i qubit individualmente.

  3. In modo analogo al primo passo, costruire un circuito per l'operazione

    xyxyfa1(x)\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \bigl\vert y \oplus f_{a^{-1}}(x)\bigr\rangle

    dove a1a^{-1} è l'inverso di aa in ZN.\mathbb{Z}_N^{\ast}.

Inizializzando gli nn qubit inferiori e componendo i tre passi, otteniamo questa trasformazione:

x0nstep 1xfa(x)step 2fa(x)xstep 3fa(x)xfa1(fa(x))=fa(x)0n\vert x \rangle \vert 0^n \rangle \stackrel{\text{step 1}}{\mapsto} \vert x \rangle \vert f_a(x)\rangle \stackrel{\text{step 2}}{\mapsto} \vert f_a(x)\rangle \vert x \rangle \stackrel{\text{step 3}}{\mapsto} \vert f_a(x)\rangle \bigl\vert x \oplus f_{a^{-1}}(f_a(x)) \bigr\rangle = \vert f_a(x)\rangle\vert 0^n \rangle

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 è O(n2).O(n^2).

Per eseguire Ma2,M_a^2, Ma4,M_a^4, Ma8,M_a^8, e così via, possiamo usare esattamente lo stesso metodo, tranne che sostituiamo aa con a2,a^2, a4,a^4, a8,a^8, e così via, come elementi di ZN.\mathbb{Z}_N^{\ast}. In altre parole, per qualsiasi potenza kk scegliamo, possiamo creare un circuito per MakM_a^k non iterando kk volte il circuito per Ma,M_a, ma invece calcolando b=akZNb = a^k \in \mathbb{Z}_N^{\ast} e poi usando il circuito per Mb.M_b.

Il calcolo delle potenze akZNa^k \in \mathbb{Z}_N è 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 aa che siano potenze di 2, in particolare a2,a4,a2m1ZN,a^2, a^4, \ldots a^{2^{m-1}} \in \mathbb{Z}_N^{\ast}, e possiamo ottenere queste potenze elevando iterativamente al quadrato m1m-1 volte. Ogni elevamento al quadrato può essere eseguito da un circuito booleano di dimensione O(n2).O(n^2).

In sostanza, quello che stiamo effettivamente facendo qui è delegare il problema di iterare MaM_a fino a 2m12^{m-1} 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 m.m.

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 MaM_a usando l'autovettore ψ1.\vert\psi_1\rangle. Ottenere questo autovettore non è facile, come si vedrà, quindi questa non sarà la fine della storia — ma è utile partire da qui.

L'autovalore di MaM_a corrispondente all'autovettore ψ1\vert \psi_1\rangle è

ωr=e2πi1r.\omega_r = e^{2\pi i \frac{1}{r}}.

Ovvero, ωr=e2πiθ\omega_r = e^{2\pi i \theta} con θ=1/r.\theta = 1/r. Quindi, se eseguiamo la procedura di stima di fase su MaM_a usando l'autovettore ψ1,\vert\psi_1\rangle, otterremo un'approssimazione di 1/r.1/r. Calcolando il reciproco saremo in grado di apprendere rr — a condizione che la nostra approssimazione sia sufficientemente buona.

Più in dettaglio, quando eseguiamo la procedura di stima di fase usando mm qubit di controllo, quello che otteniamo è un numero y{0,,2m1}.y\in\{0,\ldots,2^m-1\}. Prendiamo poi y/2my/2^m come stima per θ,\theta, che nel caso in esame è 1/r.1/r. Per capire qual è rr da questa approssimazione, la cosa naturale da fare è calcolare il reciproco della nostra approssimazione e arrotondare all'intero più vicino.

2my+12\left\lfloor \frac{2^m}{y} + \frac{1}{2} \right\rfloor

Per esempio, supponiamo che r=6r = 6 e che eseguiamo la stima di fase su MaM_a con l'autovettore ψ1\vert\psi_1\rangle usando m=5m = 5 bit di controllo. La migliore approssimazione a 55 bit di 1/r=1/61/r = 1/6 è 5/32,5/32, e abbiamo una buona probabilità (circa il 68%68\% in questo caso) di ottenere l'esito y=5y=5 dalla stima di fase. Abbiamo

2my=325=6.4,\frac{2^m}{y} = \frac{32}{5} = 6.4,

e arrotondando all'intero più vicino otteniamo 6,6, che è la risposta corretta.

D'altra parte, se non usiamo una precisione sufficiente, potremmo non ottenere la risposta giusta. Per esempio, se prendiamo m=4m = 4 qubit di controllo nella stima di fase, potremmo ottenere la migliore approssimazione a 44 bit di 1/r=1/6,1/r = 1/6, che è 3/16.3/16. Prendendo il reciproco si ottiene

2my=163=5.333\frac{2^m}{y} = \frac{16}{3} = 5.333 \cdots

e arrotondando all'intero più vicino si ottiene una risposta errata di 5.5.

Quindi quanta precisione ci serve per ottenere la risposta giusta? Sappiamo che l'ordine rr è un intero, e intuitivamente quello di cui abbiamo bisogno è una precisione sufficiente per distinguere 1/r1/r dalle possibilità vicine, incluse 1/(r+1)1/(r+1) e 1/(r1).1/(r-1). Il numero più vicino a 1/r1/r di cui dobbiamo preoccuparci è 1/(r+1),1/(r+1), e la distanza tra questi due numeri è

1r1r+1=1r(r+1).\frac{1}{r} - \frac{1}{r+1} = \frac{1}{r(r+1)}.

Quindi, se vogliamo assicurarci di non scambiare 1/r1/r per 1/(r+1),1/(r+1), è sufficiente usare una precisione tale da garantire che la migliore approssimazione y/2my/2^m a 1/r1/r sia più vicina a 1/r1/r che a 1/(r+1).1/(r+1). Se usiamo una precisione tale da garantire che

y2m1r<12r(r+1),\left\vert \frac{y}{2^m} - \frac{1}{r} \right\vert < \frac{1}{2 r (r+1)},

cosicché l'errore sia inferiore alla metà della distanza tra 1/r1/r e 1/(r+1),1/(r+1), allora y/2my/2^m sarà più vicino a 1/r1/r che a qualsiasi altra possibilità, incluse 1/(r+1)1/(r+1) e 1/(r1).1/(r-1).

Possiamo verificarlo come segue. Supponiamo che

y2m=1r+ε\frac{y}{2^m} = \frac{1}{r} + \varepsilon

per ε\varepsilon che soddisfa

ε<12r(r+1).\vert\varepsilon\vert < \frac{1}{2 r (r+1)}.

Quando prendiamo il reciproco otteniamo

2my=11r+ε=r1+εr=rεr21+εr.\frac{2^m}{y} = \frac{1}{\frac{1}{r} + \varepsilon} = \frac{r}{1+\varepsilon r} = r - \frac{\varepsilon r^2}{1+\varepsilon r}.

Massimizzando al numeratore e minimizzando al denominatore, possiamo limitare quanto siamo lontani da rr come segue.

εr21+εrr22r(r+1)1r2r(r+1)=r2r+1<12\left\vert \frac{\varepsilon r^2}{1+\varepsilon r} \right\vert \leq \frac{ \frac{r^2}{2 r(r+1)}}{1 - \frac{r}{2r(r+1)}} %= \frac{r^2}{2 r (r+1) - r} = \frac{r}{2 r + 1} < \frac{1}{2}

Siamo a meno di 1/21/2 da r,r, quindi come previsto otterremo rr quando arrotondiamo.

Purtroppo, poiché non sappiamo ancora cosa sia r,r, non possiamo usarlo per dirci quanta precisione ci serve. Quello che possiamo fare invece è usare il fatto che rr deve essere minore di NN per assicurarci di usare una precisione sufficiente. In particolare, se usiamo una precisione tale da garantire che la migliore approssimazione y/2my/2^m a 1/r1/r soddisfi

y2m1r12N2,\left\vert \frac{y}{2^m} - \frac{1}{r} \right\vert \leq \frac{1}{2N^2},

allora avremo una precisione sufficiente per determinare correttamente rr quando prendiamo il reciproco. Prendere m=2lg(N)+1m = 2\operatorname{lg}(N)+1 garantisce una buona probabilità di ottenere una stima con questa precisione usando il metodo descritto in precedenza. (Prendere m=2lg(N)m = 2\operatorname{lg}(N) è sufficiente se si è soddisfatti di un limite inferiore del 40% sulla probabilità di successo.)

Soluzione generale

Come abbiamo appena visto, se abbiamo l'autovettore ψ1\vert \psi_1 \rangle di Ma,M_a, possiamo apprendere rr 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 ψ1,\vert\psi_1\rangle, quindi dobbiamo capire come procedere.

Supponiamo momentaneamente di procedere come sopra, ma con l'autovettore ψk\vert\psi_k\rangle al posto di ψ1,\vert\psi_1\rangle, per qualsiasi scelta di k{0,,r1}k\in\{0,\ldots,r-1\} che decidiamo di considerare. Il risultato che otteniamo dalla procedura di stima di fase sarà un'approssimazione

y2mkr.\frac{y}{2^m} \approx \frac{k}{r}.

Assumendo di non conoscere né kkr,r, questo potrebbe o meno permetterci di identificare r.r. Per esempio, se k=0k = 0 otterremo un'approssimazione y/2my/2^m a 0,0, che purtroppo non ci dice nulla. Questo, tuttavia, è un caso insolito; per altri valori di k,k, saremo almeno in grado di imparare qualcosa su r.r.

Possiamo usare un algoritmo noto come algoritmo delle frazioni continue per trasformare la nostra approssimazione y/2my/2^m in frazioni vicine — inclusa k/rk/r se l'approssimazione è sufficientemente buona. Non spiegheremo qui l'algoritmo delle frazioni continue. Invece, ecco un enunciato di un fatto noto su questo algoritmo.

Fatto

Dato un intero N2N\geq 2 e un numero reale α(0,1),\alpha\in(0,1), esiste al più una scelta di interi u,v{0,,N1}u,v\in\{0,\ldots,N-1\} con v0v\neq 0 e gcd(u,v)=1\gcd(u,v)=1 che soddisfa αu/v<12N2.\vert \alpha - u/v\vert < \frac{1}{2N^2}. Dati α\alpha e N,N, l'algoritmo delle frazioni continue trova uu e v,v, o segnala che non esistono. Questo algoritmo può essere implementato come un circuito booleano di dimensione O((lg(N))3).O((\operatorname{lg}(N))^3).

Se abbiamo un'approssimazione molto stretta y/2my/2^m a k/r,k/r, ed eseguiamo l'algoritmo delle frazioni continue per NN e α=y/2m,\alpha = y/2^m, otterremo uu e v,v, come descritti nel fatto. Un'analisi del fatto ci permette di concludere che

uv=kr.\frac{u}{v} = \frac{k}{r}.

Si noti in particolare che non necessariamente apprendiamo kk e r,r, ma solo k/rk/r nella sua forma ridotta ai minimi termini.

Per esempio, e come abbiamo già notato, non impareremo nulla da k=0.k=0. Ma questo è l'unico valore di kk per cui accade. Quando kk è diverso da zero, potrebbe avere fattori comuni con r,r, ma il numero vv che otteniamo dall'algoritmo delle frazioni continue deve almeno dividere r.r.

Non è affatto ovvio, ma è vero che se abbiamo la capacità di apprendere uu e vv per u/v=k/ru/v = k/r con k{0,,r1}k\in\{0,\ldots,r-1\} scelto uniformemente a caso, allora è molto probabile che riusciamo a recuperare rr dopo solo pochi campionamenti. In particolare, se la nostra ipotesi per rr è il minimo comune multiplo di tutti i valori del denominatore vv che osserviamo, avremo ragione con alta probabilità. Intuitivamente, alcuni valori di kk non sono buoni perché condividono fattori comuni con r,r, e quei fattori comuni ci rimangono nascosti quando apprendiamo uu e v.v. Ma le scelte casuali di kk non sono portate a nascondere fattori di rr a lungo, e la probabilità che non indoviniamo correttamente rr 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 ψk\vert\psi_k\rangle di MaM_a 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 1,\vert 1\rangle, intendendo con ciò la codifica binaria a nn bit del numero 1,1, al posto di un autovettore ψ\vert\psi\rangle di Ma.M_a. 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 Ma,M_a, ed è quello che stiamo facendo qui con lo stato 1.\vert 1\rangle. (Questo non è un autovettore di MaM_a a meno che a=1,a=1, che non è una scelta che ci interesserà.)

La motivazione per scegliere lo stato 1\vert 1\rangle al posto di un autovettore di MaM_a è che la seguente equazione è vera.

1=1rk=0r1ψk\vert 1\rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \vert \psi_k\rangle

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 k{0,,r1}k\in\{0,\ldots,r-1\} uniformemente a caso e usato ψk\vert\psi_k\rangle come autovettore.

In maggior dettaglio, immaginiamo di eseguire la procedura di stima di fase con lo stato 1\vert 1\rangle al posto di uno degli autovettori ψk.\vert\psi_k\rangle. Dopo che la trasformata di Fourier quantistica inversa è stata eseguita, questo ci lascia con lo stato

1rk=0r1ψkγk,\frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \vert \psi_k\rangle \vert \gamma_k\rangle,

dove

γk=12my=02m1x=02m1e2πix(k/ry/2m)y.\vert\gamma_k\rangle = \frac{1}{2^m} \sum_{y=0}^{2^m - 1} \sum_{x=0}^{2^m-1} e^{2\pi i x (k/r - y/2^m)} \vert y\rangle.

Il vettore γk\vert\gamma_k\rangle rappresenta lo stato degli mm qubit superiori dopo che la trasformata di Fourier quantistica inversa è stata eseguita su di essi.

Quindi, in virtù del fatto che {ψ0,,ψr1}\{\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle\} è un insieme ortonormale, troviamo che una misura degli mm qubit superiori fornisce un'approssimazione y/2my/2^m al valore k/rk/r dove k{0,,r1}k\in\{0,\ldots,r-1\} è scelto uniformemente a caso. Come già discusso, questo ci permette di apprendere rr con un alto grado di fiducia dopo diverse esecuzioni indipendenti, che era il nostro obiettivo.

Costo totale

Il costo per implementare ogni unitaria controllata MakM_a^k è O(n2).O(n^2). Ci sono mm operazioni unitarie controllate, e abbiamo m=O(n),m = O(n), quindi il costo totale per le operazioni unitarie controllate è O(n3).O(n^3). Inoltre, abbiamo mm gate di Hadamard (che contribuiscono O(n)O(n) al costo), e la trasformata di Fourier quantistica inversa contribuisce O(n2)O(n^2) al costo. Pertanto, il costo delle operazioni unitarie controllate domina il costo dell'intera procedura — che è quindi O(n3).O(n^3).

Oltre al circuito quantistico stesso, ci sono alcuni calcoli classici che devono essere eseguiti durante il processo. Questo include il calcolo delle potenze aka^k in ZN\mathbb{Z}_N per k=2,4,8,,2m1,k = 2, 4, 8, \ldots, 2^{m-1}, necessarie per creare i gate unitari controllati, nonché l'algoritmo delle frazioni continue che converte le approssimazioni di θ\theta in frazioni. Questi calcoli possono essere eseguiti da circuiti booleani con un costo totale di O(n3).O(n^3).

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 N,N, e possiamo farlo ricorsivamente. Nello specifico, possiamo concentrarci sul compito di dividere N,N, che significa trovare due interi qualsiasi b,c2b,c\geq 2 per cui N=bc.N = bc. Questo non è possibile se NN è un numero primo, ma possiamo verificare in modo efficiente se NN è primo usando prima un algoritmo di test di primalità, e se NN non è primo cercheremo di dividerlo. Una volta diviso N,N, possiamo semplicemente ricorrere su bb e cc fino a quando tutti i nostri fattori sono primi e otteniamo la fattorizzazione in fattori primi di N.N.

Dividere i numeri pari è semplice: basta restituire 22 e N/2.N/2.

È anche facile dividere le potenze perfette, ovvero numeri della forma N=sjN = s^j per interi s,j2,s,j\geq 2, semplicemente approssimando le radici N1/2,N^{1/2}, N1/3,N^{1/3}, N1/4,N^{1/4}, e così via, e controllando gli interi vicini come candidati per s.s. Non occorre andare oltre log(N)\log(N) passi in questa sequenza, perché a quel punto la radice scende sotto 22 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 ss è primo. Se NN è dispari e non è una potenza di primo, tuttavia, la ricerca dell'ordine ci permette di dividere N.N.

Algoritmo probabilistico per dividere un intero dispari composito N che non è una potenza di primo
  1. Scegliere casualmente a{2,,N1}.a\in\{2,\ldots,N-1\}.

  2. Calcolare d=gcd(a,N).d=\gcd(a,N).

  3. Se d>1d > 1 allora restituire b=db = d e c=N/dc = N/d e fermarsi. Altrimenti continuare al passo successivo sapendo che aZN.a\in\mathbb{Z}_N^{\ast}.

  4. Sia rr l'ordine di aa modulo N.N. (Qui è dove abbiamo bisogno della ricerca dell'ordine.)

  5. Se rr è pari:

    5.1 Calcolare x=ar/21x = a^{r/2} - 1 modulo NN
    5.2 Calcolare d=gcd(x,N).d = \gcd(x,N).
    5.3 Se d>1d>1 allora restituire b=db=d e c=N/dc = N/d e fermarsi.

  6. Se si raggiunge questo punto, l'algoritmo non è riuscito a trovare un fattore di N.N.

Un'esecuzione di questo algoritmo potrebbe non riuscire a trovare un fattore di N.N. In particolare, questo accade in due situazioni:

  • L'ordine di aa modulo NN è dispari.
  • L'ordine di aa modulo NN è pari e gcd(ar/21,N)=1.\gcd\bigl(a^{r/2} - 1, N\bigr) = 1.

Usando la teoria elementare dei numeri si può dimostrare che, per una scelta casuale di a,a, con probabilità almeno 1/21/2 nessuno di questi eventi si verifica. In realtà, la probabilità che uno dei due eventi si verifichi è al più 2(m1)2^{-(m-1)} dove mm è il numero di fattori primi distinti di N,N, ed è per questo che è necessaria l'assunzione che NN non sia una potenza di primo. (Anche l'assunzione che NN sia dispari è necessaria affinché questo fatto sia vero.)

Questo significa che ogni esecuzione ha almeno il 50% di probabilità di dividere N.N. Pertanto, se eseguiamo l'algoritmo tt volte, scegliendo casualmente aa ogni volta, riusciremo a dividere NN con probabilità almeno 12t.1 - 2^{-t}.

L'idea di base dell'algoritmo è la seguente. Se abbiamo una scelta di aa per cui l'ordine rr di aa modulo NN è pari, allora r/2r/2 è un intero e possiamo considerare i numeri

ar/21  (mod  N)ear/2+1  (mod  N).a^{r/2} - 1\; (\textrm{mod}\; N) \quad \text{e} \quad a^{r/2} + 1\; (\textrm{mod}\; N).

Usando la formula Z21=(Z+1)(Z1),Z^2 - 1 = (Z+1)(Z-1), concludiamo che

(ar/21)(ar/2+1)=ar1.\bigl(a^{r/2} - 1\bigr) \bigl(a^{r/2} + 1\bigr) = a^r - 1.

Ora, sappiamo che ar  (mod  N)=1a^r \; (\textrm{mod}\; N) = 1 per definizione dell'ordine — il che equivale a dire che NN divide esattamente ar1.a^r - 1. Ciò significa che NN divide esattamente il prodotto

(ar/21)(ar/2+1).\bigl(a^{r/2} - 1\bigr) \bigl(a^{r/2} + 1\bigr).

Affinché questo sia vero, tutti i fattori primi di NN devono essere anche fattori primi di ar/21a^{r/2} - 1 o ar/2+1a^{r/2} + 1 (o di entrambi) — e per una selezione casuale di aa risulta improbabile che tutti i fattori primi di NN dividano uno dei termini e nessuno divida l'altro. Altrimenti, fintanto che alcuni dei fattori primi di NN dividono il primo termine e alcuni dividono il secondo termine, saremo in grado di trovare un fattore non banale di NN calcolando il MCD con il primo termine.