"Penso di poter tranquillamente affermare che nessuno capisce la meccanica quantistica." - Richard Feynman
Il tema dell’informatica quantistica ha sempre affascinato scrittori e giornalisti tecnologici. Il suo potenziale computazionale e la sua complessità gli conferivano una certa aura mistica. Troppo spesso articoli di approfondimento e infografiche descrivono nel dettaglio le diverse prospettive di questo settore, sfiorando appena la sua applicazione pratica: questo può trarre in inganno il lettore meno attento.
Articoli scientifici popolari omettono le descrizioni dei sistemi quantistici e fanno affermazioni come:
Un bit normale può essere 1 o 0, ma un qubit può essere 1 e 0 contemporaneamente.
Se sei molto fortunato (cosa di cui non sono sicuro), ti verrà detto che:
Il qubit è in sovrapposizione tra "1" e "0".
Nessuna di queste spiegazioni sembra plausibile, poiché stiamo cercando di formulare un fenomeno quantomeccanico utilizzando un linguaggio sviluppato in un mondo molto tradizionale. Per spiegare chiaramente i principi dell'informatica quantistica, è necessario utilizzare un altro linguaggio: quello matematico.
In questo tutorial tratterò gli strumenti matematici necessari per modellare e comprendere i sistemi di calcolo quantistico, nonché come illustrare e applicare la logica del calcolo quantistico. Inoltre, darò un esempio di algoritmo quantistico e ti dirò qual è il suo vantaggio rispetto a un computer tradizionale.
Farò del mio meglio per spiegare tutto questo in un linguaggio chiaro, ma spero comunque che i lettori di questo articolo abbiano una conoscenza di base dell'algebra lineare e della logica digitale (l'algebra lineare è trattata
Innanzitutto, esaminiamo i principi della logica digitale. Si basa sull'uso di circuiti elettrici per eseguire calcoli. Per rendere la nostra descrizione più astratta, semplifichiamo lo stato del filo elettrico in “1” o “0”, che corrisponderà agli stati “acceso” o “spento”. Disponendo i transistor in una determinata sequenza, creeremo i cosiddetti elementi logici che prendono uno o più valori del segnale di ingresso e li convertono in un segnale di uscita in base a determinate regole della logica booleana.
Porte logiche comuni e relative tabelle di stato
Sulla base delle catene di tali elementi di base, è possibile creare elementi più complessi e, sulla base delle catene di elementi più complessi, possiamo infine aspettarci, con un ampio grado di astrazione, di ottenere un analogo del processore centrale.
Come ho detto prima, abbiamo bisogno di un modo per rappresentare matematicamente la logica digitale. Innanzitutto, introduciamo la logica matematica tradizionale. Utilizzando l'algebra lineare, i bit classici con i valori "1" e "0" possono essere rappresentati come due vettori colonna:
dove sono i numeri a sinistra
Identità | Trasformazione dell'identità |
Negazione | negazione |
Costante-0 | Calcolo della costante "0" |
Costante-1 | Calcolo della costante "1" |
Sulla base della nuova rappresentazione del bit proposta, è abbastanza semplice eseguire operazioni sul bit corrispondente utilizzando una trasformazione vettoriale:
Prima di andare oltre, diamo un'occhiata al concetto
Con
Ora che abbiamo quasi tutti i concetti matematici necessari, passiamo alla nostra prima porta logica quantistica. Questo è l'operatore
Questo operatore può essere rappresentato come il seguente vettore di trasformazione:
Per dimostrare tutto ciò che abbiamo trattato finora, ti mostrerò come utilizzare l'elemento CNOT su più bit:
Riassumendo quanto già detto: nel primo esempio scomponiamo |10⟩ in parti del suo prodotto tensoriale e utilizziamo la matrice CNOT per ottenere un nuovo stato corrispondente del prodotto; lo fattorizziamo quindi a |11⟩ secondo la tabella dei valori CNOT fornita in precedenza.
Quindi, abbiamo ricordato tutte le regole matematiche che ci aiuteranno a comprendere il calcolo tradizionale e i bit ordinari, e possiamo finalmente passare al moderno calcolo quantistico e ai qubit.
Se hai letto fin qui, allora ho buone notizie per te: i qubit possono essere facilmente espressi matematicamente. In generale, se un bit classico (cbit) può essere impostato su |1⟩ o |0⟩, il qubit è semplicemente in sovrapposizione e può essere sia |0⟩ che |1⟩ prima della misurazione. Dopo la misurazione, collassa in |0⟩ o |1⟩. In altre parole, un qubit può essere rappresentato come una combinazione lineare di |0⟩ e |1⟩ secondo la formula seguente:
dove a₀ и a₁ rappresentano, rispettivamente, le ampiezze |0⟩ e |1⟩. Queste possono essere pensate come "probabilità quantistiche", che rappresentano la probabilità che un qubit collassi in uno degli stati dopo essere stato misurato, poiché nella meccanica quantistica un oggetto in sovrapposizione collassa in uno degli stati dopo essere stato fissato. Espandiamo questa espressione e otteniamo quanto segue:
Per semplificare la mia spiegazione, questa è la rappresentazione che utilizzerò in questo articolo.
Per questo qubit, la possibilità di collassare al valore a₀ dopo la misurazione è uguale a |a₀|² e la possibilità di un crollo del valore a₁ è uguale a |a₁|². Ad esempio, per il seguente qubit:
la probabilità di collassare in “1” è pari a |1/ √2|², ovvero ½, cioè 50/50.
Poiché nel sistema classico tutte le probabilità devono sommarsi a uno (per una distribuzione di probabilità completa), possiamo concludere che la somma dei quadrati dei valori assoluti delle ampiezze |0⟩ e |1⟩ deve sommarsi a uno. Sulla base di queste informazioni possiamo formulare la seguente equazione:
Se hai familiarità con la trigonometria, noterai che questa equazione corrisponde al teorema di Pitagora (a²+b²=c²), ovvero possiamo rappresentare graficamente i possibili stati del qubit come punti sulla circonferenza unitaria, ovvero:
Gli operatori e gli elementi logici vengono applicati ai qubit allo stesso modo dei bit classici, sulla base di una trasformazione di matrice. Tutti gli operatori di matrice invertibile che abbiamo richiamato finora, in particolare CNOT, possono essere utilizzati per lavorare con i qubit. Tali operatori di matrice consentono di utilizzare ciascuna delle ampiezze del qubit senza misurarlo e comprimerlo. Lascia che ti faccia un esempio di utilizzo dell'operatore di negazione su un qubit:
Prima di continuare, lascia che ti ricordi che i valori di ampiezza a₀ e a₁ lo sono in realtà
Tuttavia, per semplificare la spiegazione, ci limiteremo qui ai numeri reali.
Sembra giunto il momento di discutere alcuni elementi logici che hanno senso esclusivamente nel contesto dell’informatica quantistica.
Uno degli operatori più importanti è l'"elemento Hadamard": prende un bit nello stato "0" o "1" e lo mette nella sovrapposizione appropriata con una probabilità del 50% di collassare in uno stato "1" o "0" dopo la misurazione.
Notare che c'è un numero negativo nella parte in basso a destra dell'operatore Hadamard. Ciò è dovuto al fatto che il risultato dell'applicazione dell'operatore dipende dal valore del segnale di ingresso: - |1⟩ o |0⟩, e quindi il calcolo è reversibile.
Un altro punto importante dell'elemento Hadamard è la sua reversibilità, ovvero può prendere un qubit nella sovrapposizione appropriata e trasformarlo in |0⟩ o |1⟩.
Questo è molto importante perché ci dà la possibilità di trasformarci da uno stato quantistico senza determinare lo stato del qubit e, di conseguenza, senza collassarlo. Pertanto, possiamo strutturare il calcolo quantistico sulla base di un principio deterministico piuttosto che probabilistico.
Gli operatori quantistici contenenti solo numeri reali sono il loro opposto, quindi possiamo rappresentare il risultato dell'applicazione dell'operatore a un qubit come trasformazione all'interno del cerchio unitario sotto forma di una macchina a stati:
Pertanto, il qubit, il cui stato è presentato nel diagramma sopra, dopo aver applicato l'operazione di Hadamard, viene trasformato nello stato indicato dalla freccia corrispondente. Allo stesso modo, possiamo costruire un'altra macchina a stati che illustrerà la trasformazione di un qubit utilizzando l'operatore di negazione come mostrato sopra (noto anche come operatore di negazione di Pauli o inversione di bit), come mostrato di seguito:
Per eseguire operazioni più complesse sul nostro qubit, possiamo concatenare più operatori o applicare elementi più volte. Esempio di trasformazione seriale basata su
Cioè, se iniziamo con il bit |0⟩, applichiamo un'inversione di bit, quindi un'operazione di Hadamard, quindi un'altra inversione di bit e ancora un'operazione di Hadamard, seguita da un'inversione di bit finale, ci ritroveremo con il vettore dato da on il lato destro della catena. Sovrapponendo diverse macchine a stati una sopra l'altra, possiamo iniziare da |0⟩ e tracciare le frecce colorate corrispondenti a ciascuna trasformazione per capire come funziona.
Dato che siamo arrivati fin qui, è tempo di considerare uno dei tipi di algoritmi quantistici, vale a dire:
Immaginiamo di avere una scatola nera che contiene una funzione/operatore su un bit (ricorda: con un bit si possono eseguire solo quattro operazioni: conversione di identità, negazione, valutazione della costante "0" e valutazione della costante "1 "). Qual è esattamente la funzione svolta nella scatola? Non sai quale, ma puoi esaminare tutte le varianti di valori di input che desideri e valutare i risultati di output.
Quanti ingressi e uscite dovresti scorrere attraverso la scatola nera per capire quale funzione viene utilizzata? Pensaci per un secondo.
Nel caso di un computer classico, sarà necessario effettuare 2 interrogazioni per determinare la funzione da utilizzare. Ad esempio, se l'ingresso "1" produce un'uscita "0", diventa chiaro che viene utilizzata la funzione di calcolo della costante "0" o la funzione di negazione, dopodiché sarà necessario modificare il valore del segnale di ingresso a "0" e vedere cosa succede all'uscita.
Nel caso di un computer quantistico saranno necessarie anche due query, poiché occorrono comunque due diversi valori di output per definire con precisione la funzione da applicare al valore di input. Tuttavia, se si riformula un po’ la domanda, si scopre che i computer quantistici hanno ancora un serio vantaggio: se si volesse sapere se la funzione utilizzata è costante o variabile, i computer quantistici avrebbero un vantaggio.
La funzione utilizzata nel riquadro è variabile se diversi valori del segnale di ingresso producono risultati diversi in uscita (ad esempio, conversione di identità e inversione di bit) e se il valore di uscita non cambia indipendentemente dal valore di ingresso, allora la la funzione è costante (ad esempio, calcolando una costante "1" o calcolando la costante "0").
Utilizzando un algoritmo quantistico, puoi determinare se una funzione in una scatola nera è costante o variabile in base a una sola query. Ma prima di vedere come farlo in dettaglio, dobbiamo trovare un modo per strutturare ciascuna di queste funzioni su un computer quantistico. Poiché qualsiasi operatore quantistico deve essere invertibile, ci troviamo subito di fronte a un problema: le funzioni per calcolare le costanti “1” e “0” non lo sono.
Una soluzione comune utilizzata nell'informatica quantistica consiste nell'aggiungere un qubit di output aggiuntivo che restituisca qualunque valore di input riceva la funzione.
a: | dopo: |
In questo modo possiamo determinare i valori di input esclusivamente in base al valore di output e la funzione diventa invertibile. La struttura dei circuiti quantistici crea la necessità di un bit di input aggiuntivo. Per sviluppare gli operatori corrispondenti, assumeremo che il qubit di input aggiuntivo sia impostato su |0⟩.
Utilizzando la stessa rappresentazione del circuito quantistico utilizzata in precedenza, vediamo come ciascuno dei quattro elementi (trasformazione dell'identità, negazione, valutazione della costante "0" e valutazione della costante "1") può essere implementato utilizzando operatori quantistici.
Ecco come implementare ad esempio la funzione per il calcolo della costante “0”:
Calcolo della costante "0":
Qui non abbiamo affatto bisogno di operatori. Il primo qubit di input (che abbiamo assunto essere |0⟩) restituisce lo stesso valore e il secondo valore di input restituisce se stesso, come al solito.
Con la funzione per il calcolo della costante “1” la situazione è leggermente diversa:
Calcolo della costante "1":
Poiché abbiamo assunto che il primo qubit di input sia sempre impostato su |0⟩, il risultato dell'applicazione dell'operatore di inversione di bit è che produce sempre uno in output. E come al solito, il secondo qubit fornisce il proprio valore in uscita.
Quando si mappa l'operatore di trasformazione dell'identità, l'attività inizia a diventare più complicata. Ecco come farlo:
Trasformazione identica:
Il simbolo qui utilizzato denota l'elemento CNOT: la riga superiore denota il bit di controllo e la riga inferiore denota il bit di controllo. Ti ricordo che quando si utilizza l'operatore CNOT, il valore del bit di controllo cambia se il bit di controllo è uguale a |1⟩, ma rimane invariato se il bit di controllo è uguale a |0⟩. Poiché abbiamo assunto che il valore della riga superiore sia sempre uguale a |0⟩, il suo valore viene sempre assegnato alla riga inferiore.
Procediamo in modo simile con l’operatore di negazione:
Negazione:
Invertiamo semplicemente il bit alla fine della linea di output.
Ora che abbiamo chiarito questa comprensione preliminare, diamo un'occhiata ai vantaggi specifici di un computer quantistico rispetto a un computer tradizionale quando si tratta di determinare la costanza o la variabilità di una funzione nascosta in una scatola nera utilizzando una sola query.
Per risolvere questo problema utilizzando il calcolo quantistico in un'unica richiesta, è necessario sovrapporre i qubit di input prima di passarli alla funzione, come mostrato di seguito:
L'elemento Hadamard viene riapplicato al risultato della funzione per interrompere la sovrapposizione dei qubit e rendere deterministico l'algoritmo. Avviamo il sistema nello stato |00⟩ e, per motivi che spiegherò tra breve, otteniamo il risultato |11⟩ se la funzione applicata è costante. Se la funzione all'interno della scatola nera è variabile, dopo la misurazione il sistema restituisce il risultato |01⟩.
Per comprendere il resto dell'articolo, diamo un'occhiata all'illustrazione che ho mostrato prima:
Utilizzando l'operatore di inversione di bit e quindi applicando l'elemento Hadamard ad entrambi i valori di input uguali a |0⟩, ci assicuriamo che siano tradotti nella stessa sovrapposizione di |0⟩ e |1⟩, come segue:
Usando l'esempio di passaggio di questo valore a una funzione di scatola nera, è facile dimostrare che entrambe le funzioni a valore costante restituiscono |11⟩.
Calcolo della costante "0":
Allo stesso modo, vediamo che anche la funzione per il calcolo della costante “1” produce come output |11⟩, cioè:
Calcolo della costante "1":
Nota che l'output sarà |1⟩, poiché -1² = 1.
Con lo stesso principio possiamo dimostrare che utilizzando entrambe le funzioni variabili otterremo sempre |01⟩ in uscita (a condizione che utilizziamo lo stesso metodo), anche se tutto è un po' più complicato.
Trasformazione identica:
Poiché CNOT è un operatore a due qubit, non può essere rappresentato come una semplice macchina a stati, e quindi è necessario definire due segnali di uscita basati sul prodotto tensoriale di entrambi i qubit di input e sulla moltiplicazione per la matrice CNOT come descritto in precedenza:
Con questo metodo possiamo anche verificare che il valore di uscita |01⟩ viene ricevuto se la funzione di negazione è nascosta nella scatola nera:
Negazione:
Pertanto, abbiamo appena dimostrato una situazione in cui un computer quantistico è chiaramente più efficiente di un computer convenzionale.
Qual è il prossimo?
Suggerisco di finire qui. Abbiamo già fatto un ottimo lavoro. Se hai compreso tutto ciò che ho trattato, penso che ora tu abbia una buona conoscenza delle basi dell'informatica quantistica e della logica quantistica e del motivo per cui gli algoritmi quantistici possono essere più efficienti dell'informatica tradizionale in determinate situazioni.
La mia descrizione difficilmente può essere definita una guida completa all'informatica quantistica e agli algoritmi - piuttosto, è una breve introduzione alla matematica e alla notazione, progettata per dissipare le idee dei lettori sull'argomento imposte dalle fonti scientifiche popolari (sul serio, molti davvero non riescono a capire la situazione!). Non ho avuto il tempo di toccare molti argomenti importanti, come ad esempio
Se vuoi sistematizzare e strutturare le tue conoscenze sui computer quantistici, fortemente Ti consiglio di leggere
Fonte: habr.com