Problema di Simon

Nella teoria della complessità computazionale e nella computazione quantistica, il problema di Simon è un problema computazionale che può essere risolto in maniera esponenzialmente più veloce su un computer quantistico rispetto a un computer classico (o tradizionale). Il problema di Simon incorpora l'uso di una scatola nera (black box). I problemi con la scatola nera danno agli algoritmi quantistici un vantaggio rispetto agli algoritmi classici.

Il problema in sé è di poco interesse pratico perché ci sono poche situazioni realistiche in cui ci sia bisogno di risolvere il problema di Simon. Tuttavia, il problema è comunque importante perché si può dimostrare che un algoritmo quantistico può risolvere questo problema in modo esponenzialmente più veloce rispetto a un qualsiasi algoritmo classico conosciuto. Questo è il primo esempio di problema computazionale che può essere risolto in un tempo polinomiale su un computer quantistico.

Il problema fu ideato da Daniel Simon nel 1994. Simon mostrò un algoritmo quantistico, spesso detto algoritmo di Simon, che risolve il problema richiedendo esponenzialmente meno tempo computazionale (o più precisamente, chiamate) rispetto al miglior algoritmo classico. Nell'algoritmo di Simon è necessario effettuare un numero lineare di chiamate, mentre l'algoritmo classico ne necessita un numero esponenziale. Questo problema dà una separazione dell'oracolo tra le classi di complessità BPP e BQP, a differenza della separazione data dall'algoritmo di Deutsch-Jozsa, che separa P e EQP. La separazione è esponenziale (relativa a un oracolo) tra la complessità classica e quantistica.

L'algoritmo di Simon fu inoltre l'ispirazione per l'algoritmo di Shor. Entrambi i problemi sono casi particolari del problema del sottogruppo nascosto abeliano, per il quale sono conosciuti algoritmi quantistici efficienti.

Descrizione del problema

[modifica | modifica wikitesto]

Sia data una funzione (implementata da una black box o oracolo) , che gode della proprietà che per qualche e per ogni ,

se e solo se o

Lo scopo è identificare s e identificare se o chiamando la funzione.

Qui, classifica una funzione iniettiva (uno-a-uno). Se invece , la funzione è due-a-uno tale che

In altre parole, è una funzione due-a-uno tale che , per ogni dove è incognita.

Lo scopo del problema è ridurre il numero di chiamate alla black box per determinare s in modo esponenzialmente veloce.

Per esempio, se , allora la funzione seguente è un esempio di una funzione che soddisfa la proprietà già menzionata:

000 101
001 010
010 000
011 110
100 000
101 110
110 101
111 010

In questo caso si ha la soluzione . Può essere facilmente verificato che ogni output di compare due volte, e che il prodotto XOR bitwise tra le due stringhe di input corrispondenti a un qualsiasi output è pari a .

Per esempio, le stringhe di input e sono entrambi mappati (da ) allo stesso output , ovvero e . Se si applica XOR a 010 e 100 si ottiene 110, ovvero La stringa può anche essere verificata usando stringhe di input 001 e 111 che sono entrambi mappati (da f) alla stessa stringa di input 010. Anche se si applica XOR a 001 e 111, si ottiene 110, ovvero . Questo dà la stessa soluzione risolta prima.

In questo esempio la funzione è di fatto due-a-uno dove .

Dato che , si può riscrivere il coefficiente come segue:

Difficoltà del problema

[modifica | modifica wikitesto]

Intuitivamente, questo è un problema molto difficile da risolvere in modo "classico". L'intuizione dietro alla difficoltà è ragionevolmente semplice: se si vuole risolvere il problema classicamente, serve trovare due diversi input e per cui . Non c'è necessariamente una struttura nella funzione che potrebbero aiutare a trovare due input del genere: più nello specifico, è possibile scoprire qualcosa di (o cosa fa) solo quando, per due diversi input si ottiene lo stesso output. In ogni caso, bisognerebbe prendere diversi input prima che sia probabile trovare una coppia che viene mappata da allo stesso output, come per il paradosso del compleanno. Siccome, classicamente per trovare s con una certezza del 100% servirebbe controllare fino a input, il problema di Simon cerca di trovare s usando molte meno chiamate del metodo classico.

Panoramica dell'algoritmo

[modifica | modifica wikitesto]

L'idea dietro all'algoritmo di Simon è "sondare" (o "campionare") un circuito quantistico (si veda la figura sotto) "abbastanza volte" per trovare stringhe a n-bit linearmente indipendenti, cioè

tali che le seguenti equazioni sono soddisfatte

dove è il prodotto scalare modulo 2; vale a dire, dove , per e per .

Allora, questo sistema lineare contiene equazioni lineari in incognite (cioè i bit di ), e lo scopo è risolvere per ottenere , e è fissato per una data funzione . Non c'è sempre una (unica) soluzione.

Circuito quantistico

[modifica | modifica wikitesto]
Circuito quantistico che rappresenta/implementa l'algoritmo di Simon

Il circuito quantistico (in figura) è l'implementazione (e visualizzazione) della parte quantistica dell'algoritmo di Simon.

Per prima cosa si prepara uno stato quantistico di tutti zero (facilmente fattibile). Lo stato rappresenta dove è il numero di qubit. Metà di questo stato viene quindi trasformato con una porta di Hadamard. Il risultato è quindi mandato nell'oracolo (o black box, "scatola nera"), che sa come calcolare . L'operatore agisce sui due registri come . Dopo di ciò, parte dell'output prodotta dall'oracolo è trasformata usando un'altra trasformata di Hadamard. Infine, viene fatta una misura sul risultante stato quantistico. Durante questa misura si recuperano le stringhe a n bit, , menzionate nella precedente sezione.

L'algoritmo di Simon può essere pensato come un algoritmo iterativo, che fa uso di un circuito quantistico, seguito da un algoritmo (possibilmente) classico per trovare la soluzione di un sistema lineare di equazioni.

Descrizione dell'algoritmo

[modifica | modifica wikitesto]

L'algoritmo di Simon inizia con l'input , dove è lo stato quantistico con zeri.

(Il simbolo è il simbolo tipico usato per rappresentare il prodotto tensoriale. Per non ingombrare la notazione, il simbolo viene talvolta omesso: per esempio nella frase precedente, è equivalente a . In questa voce, è spesso usato per evitare ambiguità o confusione.)

Ad esempio, per , l'input iniziale è

.

Prima trasformazione di Hadamard

[modifica | modifica wikitesto]

Per prima cosa, l'input viene trasformato con una trasformata di Hadamard. Specificamente, la trasformata di Hadamard (il prodotto tensoriale può essere applicato anche a matrici) viene applicata ai primi qubit, cioè allo stato "parziale" , così lo stato dopo questa operazione risulta essere

dove denota una stringa a n bit (cioè la somma è su tutte le stringhe a n bit). Il termine può essere raccolto fuori dalla sommatoria perché non dipende da , e .

Si supponga (ancora) , allora l'input è e la trasformata di Hadamard è

Se si applica al primo , cioè allo stato

si ottiene

Per ottenere lo stato composto, si fa il prodotto tensore di con , ossia

Si chiama ora l'oracolo o la black box ( in figura) per calcolare la funzione sull'input trasformato , per ottenere lo stato

Seconda trasformazione di Hadamard

[modifica | modifica wikitesto]

Si applica poi nuovamente la trasformata di agli stati dei primi qubit dello stato , e si ha

dove può essere o o , a seconda di , dove , per . Quindi, ad esempio, se e , allora , che è pari, quindi in questo caso, ; è sempre un numero non negativo.

Ora si riscriva lo stato

come segue:

Dopo aver effettuato tutte le operazioni di cui sopra, bisogna effettua una misura.

Ci sono ora due casi possibili da analizzare separatamente

  • o
  • , con .

Si analizzi il caso in cui , il che significa che è uno-a-uno (iniettiva).

Lo stato prima della misura è

Ora, la probabilità che la misura dia una qualsiasi stringa è

Questo segue dal fatto che

perché i due vettori differiscono solo nell'ordinamento delle loro componenti, dato che è iniettiva.

Il valore del membro di destra vale semplicemente

Pertanto, quando , l'esito della misura è semplicemente una stringa a n bit uniformemente distribuita.

Si analizzi ora il caso in cui , dove . In questo caso, è una funzione due-a-uno, cioè ci sono due input che vengono mappati da allo stesso output.

L'analisi effettuata nel prima è ancora valida: la probabilità di misurare una qualsiasi stringa può essere ancora rappresentata da

Tuttavia, in questo secondo caso, è necessario capire quale sia il valore di .

Sia , l'insieme immagine di . Sia (un certo output della funzione), allora per ogni , c'è una e una sola , tale che ; inoltre si ha che , che è equivalente a .

Quindi, si ha

Dato che , si può ancora riscrivere come

Ora, se è dispari, allora . Allora,

In definitiva, può essere scritta come

Numero dispari
[modifica | modifica wikitesto]

Se, invece, è pari, allora . In questo caso,

Di conseguenza si ha

Dato che , non si misurerà mai nessuna stringa . Si ha interferenza distruttiva.

Quindi si ha

Si tratta del caso di interferenza costruttiva,

.

Quindi, per riassumere, in questo caso si hanno le seguenti probabilità

Elaborazione classica

[modifica | modifica wikitesto]

Facendo girare il circuito, risultano due casi:

  • Nel caso (particolare) in cui , i risultati della misura sono con probabilità
  • nel caso in cui (), la probabilità di ottenere una stringa è data da

Perciò, in ambo i casi i risultati della misura danno che soddisfa , e la distribuzione è uniforme su tutte le stringhe che soddisfano questa condizione.

Si hanno informazioni a sufficienza per determinare ? Sì, a patto che il processo sia ripetuto molte volte. Nello specifico, se il processo sopra viene ripetuto volte, si ottengono stringhe , tali che

Questo è un sistema di equazioni lineari in incognite (cioè i bit di ), e lo scopo è risolverlo per ottenere . Si noti che ognuna delle che si ottengono dalle misura è, naturalmente, l'esito di una misura, quindi è conosciuta.

Si otterrà una unica soluzione non nulla se sono linearmente indipendenti. La probabilità che siano linearmente indipendente è almeno

Se sono linearmente indipendenti, si può risolvere il sistema e trovare una candidata per la soluzione e verificare che . Se , allora e il problema è risolto. Se , deve essere . Se così non fosse, l'unica soluzione non nulla delle equazioni lineari sarebbe stata ). Ad ogni modo, con l'indipendenza lineare delle equazioni, si può risolvere il problema.

L'algoritmo di Simon necessita di chiamate all'oracolo, mentre un algoritmo classico ne necessita almeno . Si sa anche che l'algoritmo di Simon è ottimale, nel senso che ogni altro algoritmo quantistico che risolve questo problema necessiterà di chiamate.[1][2]

  1. ^ P. Koiran, V. Nesme e N. Portier, The quantum query complexity of the Abelian hidden subgroup problem (ps), in Theoretical Computer Science, vol. 380, n. 1-2, 2007, pp. 115–126, DOI:10.1016/j.tcs.2007.02.057.
  2. ^ P. Koiran, V. Nesme e N. Portier, A quantum lower bound for the query complexity of Simon's Problem (ps), in Proc. ICALP., vol. 3580, 2005, pp. 1287–1298, Bibcode:2005quant.ph..1060K, arXiv:quant-ph/0501060.