La computazione quantistica

La computazione quantistica

Condividi con i tuoi amici...

Negli ultimi anni, l’Intelligenza Artificiale ha visto un enorme sviluppo grazie all’aumento delle capacità di calcolo dei computer. Resta il fatto che la computazione classica ha i suoi limiti, e il futuro dell’AI potrebbe dipendere dall’avanzamento della tecnologia quantistica. Con l’arrivo dei computer quantistici, le applicazioni dell’AI potrebbero diventare ancora più avanzate e sofisticate, aprendo nuove opportunità per la ricerca e lo sviluppo tecnologico in molti settori. In questo articolo, approfondiremo gli aspetti principali della computazione quantistica. Cercheremo di semplificare un argomento complesso rimanendo fedeli ai concetti fondamentali. Non sarà una cosa semplice, ma puoi seguirci per vedere se riusciremo in questo intento.

Questo articolo non è una lezione sul calcolo quantistico e ancor meno di fisica quantistica, in quanto i concetti che verranno richiamati da queste discipline saranno presentati in modo del tutto non rigoroso, ma pur sempre utile per farsi un’idea dei fondamenti su cui si basa il funzionamento dei computer quantistici. Per approfondire i concetti della computazione quantistica rimandiamo al testo Quantum Computation and Quantum Information” di Michael Nielsen e Isaac Chuang. Per quanto riguarda la fisica quantistica esistono valide dispense online. Un testo storico è quello di Fisica Teorica 3 – Meccanica quantistica – Teoria non relativistica di Landau Lev D., Lifšits Evgenij M.

I nostri computer: Un accenno alla computazione classica

Il computer che stiamo usando impiega una computazione classica fondata su sequenze di bit.
I bit sono l’unità di base dell’informazione classica, rappresentati da 0 o 1, e possono essere manipolati utilizzando porte logiche classiche. La computazione classica è basata su una logica booleana, in cui le operazioni logiche (come AND, OR, NOT) vengono utilizzate per manipolare i bit di input in modo da ottenere un’uscita specifica.

Un esempio di calcolo semplice che utilizza i bit classici potrebbe essere l’addizione binaria di due numeri. Per esempio, se vogliamo calcolare 5 + 3, convertiamo i numeri in binario: 5 = 101 e 3 = 011. Utilizzando la porta logica dell’OR esclusivo (XOR), possiamo sommare i due numeri bit a bit. Il risultato sarebbe 110, che convertito in decimale corrisponde a 6.

Il sistema hardware di base per la computazione classica è il transistor. I transistor sono dispositivi che possono essere utilizzati per creare porte logiche, che a loro volta possono essere utilizzate per manipolare i bit. I circuiti integrati sono costruiti utilizzando un gran numero di transistor per creare complessi circuiti logici che possono eseguire operazioni complesse sui dati.

Facciamo un esempio

La porta logica XOR (Exclusive OR) è un operatore logico che restituisce un valore di output vero (1) solo se i suoi due input sono differenti. In altre parole, l’output è vero se uno dei due input è vero, ma non entrambi. Ecco lo schema della porta logica XOR:

Questa porta logica è molto utilizzata nella somma binaria di due numeri, poiché permette di sommare i bit di due numeri senza considerare l’eventuale riporto dal bit meno significativo al successivo. Ad esempio, per sommare i numeri binari 1011 e 0101, si può procedere bit per bit utilizzando la porta XOR:

1 0 1 1
0 1 0 1

——-

1 1 1 0

In questo caso, si inizia dalla destra, sommando i bit meno significativi 1+1=0 con riporto 1, poi si passa al bit successivo e si sommano 1+0=1, e così via fino ad arrivare al bit più significativo. Si ottiene quindi il risultato della somma binaria 1110.

Grazie a questo esempio si può evidenziare la presenza dei seguenti elementi:

  • Il bit che fondamentalmente si traduce in una configurazione fisica che può esistere in due stati distinti e stabili, come ad esempio la presenza o l’assenza di carica elettrica in un condensatore o la posizione di un interruttore aperto o chiuso. In pratica, il bit è rappresentato da una tensione elettrica che può assumere due valori distinti, come per esempio 0V e 5V in un sistema digitale.
  • le porte logiche che altro non sono che circuiti elettronici o componenti di software che elaborano segnali elettrici o numeri binari per eseguire operazioni logiche e matematiche. Le porte logiche sono utilizzate per creare circuiti digitali che possono effettuare operazioni matematiche, controllare flussi di dati e processare informazioni. Ogni porta logica ha una funzione specifica che dipende dal suo design. Ad esempio, la porta logica “AND” restituisce un valore di “1” solo quando entrambi i suoi input sono “1”, altrimenti restituisce “0”. La porta logica “OR” restituisce un valore di “1” se almeno uno dei suoi input è “1”, altrimenti restituisce “0”. La porta logica “NOT” inverte il valore di un input, restituendo “1” se l’input è “0” e viceversa.

Le porte logiche possono essere combinate per creare circuiti più complessi che eseguono operazioni matematiche e logiche più avanzate. Ad esempio, è possibile utilizzare le porte logiche per creare un circuito che esegue la somma binaria di due numeri. Il circuito prende in input due numeri in formato binario, esegue la somma bit per bit utilizzando una combinazione di porte logiche “AND”, “OR” e “XOR”, e restituisce il risultato in formato binario.

L’idea alla base della computazione classica e quantistica

l’idea di base della computazione, sia classica che quantistica, è quella di rappresentare e manipolare informazioni attraverso sistemi fisici. Nel caso della computazione classica, l’informazione è rappresentata da bit che possono assumere solo i valori 0 o 1, mentre in quella quantistica l’informazione è rappresentata da qubit la cui definizione daremo presto. La manipolazione di questi sistemi viene effettuata tramite l’utilizzo di porte logiche, che agiscono sui bit o sui qubit in base alle regole della logica booleana o quantistica. In questo modo, è possibile elaborare informazioni e risolvere problemi in modo efficiente e veloce.

Il calcolo parallelo

Immaginiamo per un attimo di calcolare la somma di 100 numeri interi. Se volessimo eseguire questa operazione in modo seriale, dovremmo sommare i numeri uno per uno, cosa che richiederebbe un sacco di tempo. Invece, se dividiamo i numeri in gruppi di 10 e sommiamo i numeri in ogni gruppo in parallelo quindi simultaneamente, il calcolo sarebbe molto più veloce.

Un altro esempio potrebbe essere il calcolo della moltiplicazione di due numeri interi. In modo seriale, dovremmo moltiplicare ogni cifra del primo numero per ogni cifra del secondo numero, cosa che richiede molte operazioni. Invece, possiamo dividere i numeri in gruppi di cifre e moltiplicare i gruppi in parallelo, cosa che accelererebbe il calcolo.

In generale, il calcolo parallelo è più veloce perché ci consente di eseguire molte operazioni contemporaneamente, sfruttando al massimo le risorse disponibili.

La computazione quantistica permette proprio di effettuare calcoli in parallelo ed è per questo che la sua efficienza è superiore a quella della comuputazione classica.

Quest’ultima si realizza fondamentalmente mediante la presenza o meno di segnali elettrici (bit) e circuiti (porte logiche) che operano sui primi. Anche la computazione quantistica si basa a livello di hardware su un sistema fisico (qubit) e su apparecchiature che agiscono su tale sistema (porte logiche) in modo da manipolarne lo stato e permettere un’elaborazione dell’informazione.

Ciò che rende più complicata la computazione quantistica rispetto a quella classica è dovuto al fatto che il sistema fisico alla sua base è di natura quantistica e obbedisce alle leggi delle fisica quantistica la cui comprensione spesso risulta difficile. persino Einstein che ricevette il premio Nobel nel 1921 per aver scoperto nel 1905 e descritto teoricamente l’effetto fotoelettrico di natura quantistica, nutriva molti dubbi sulla completezza della teoria dei quanti. Quindi non spaventiamoci se la fisica quantistica ci appare illogica.

Un po’ di fisica quantistica

Che cosa intendiamo per sistema fisico quantistico?
Ci si riferisce ad una particella elementare, per esempio un elettrone o ad un atomo o ad un fotone. Un sistema quantistico dopo una misura, per esempio della sua posizione, si trova in uno stato descritto matematicamente da una funzione d’onda in campo complesso che contiene l’esatta informazione della posizione. Se, per esempio, si misura lo spin dell’elettrone, il suo stato dopo la misura è descritto da una funzione di definito spin. Queste proprietà misurabili dei sistemi quantistici si dicono osservabili quantistiche. Se la misura dello spin di un elettrone può dare solo due possibili valori alternativi: su o giù con egual probabilità allora prima della misura l’elettrone può trovarsi in uno stato di sovrapposizione, il quale può essere descritto matematicamente come una combinazione lineare dei due stati quantistici di definito spin.

In questo stato di sovrapposizione l’elettrone non ha né spin su né spin giù ma può averli entrambi nello stesso tempo. Solo dopo una misura si otterrà uno dei due stati con una certa probabilità. Ciò è in netto contrasto con il mondo classico in cui un oggetto può essere solo in uno stato definito e non in una sovrapposizione di stati. Il principio di sovrapposizione degli stati è una caratteristica unica della fisica quantistica e gioca un ruolo fondamentale nella manipolazione di informazioni quantistiche e nella realizzazione di algoritmi quantistici efficienti.

È come se un oggetto una volta osservato possa essere nero o bianco ma prima di osservarlo non è né nero né bianco ma in uno stato per cui è certo che vi sia la probabilità Pb di osservarlo bianco e la probabilità Pn di osservarlo nero. Questa particolare combinazione di probabilità è tutto ciò che si può sapere in relazione al colore dell’oggetto. L’atto dell’osservazione, come l’atto di una qualsiasi misura o intervento esterno cambia il sistema facendogli assumere una delle due proprietà. In realtà i sistemi quantistici possono trovarsi in uno stato di sovrapposizione di più di due stati.

Usando la notazione di Dirac se rappresentiamo i due stati alternativi del sistema quantistico con |0⟩ e |1⟩, una sovrapposizione di stati può essere espressa come:

|ψ⟩ = α|0⟩ + β|1⟩

dove |ψ⟩ è il nuovo stato.

α e β sono numeri complessi tali che |α|² + |β|² = 1, detta condizione di normalizzazione.

|α|² indica la probabilità di ottenere la misura corrispondente al valore 0, mentre |β|² indica la probabilità di ottenere una misura corrispondente al valore 1 dell’osservabile fisica in questione.

È arrivato il momento di definire bene il qubit

Un qubit, o quantum bit, è l’unità fondamentale di informazione nella computazione quantistica. A differenza di un bit classico, che può assumere solo due stati (0 o 1), un qubit può esistere in una sovrapposizione di entrambi gli stati simultaneamente, permettendo un potenziale aumento esponenziale nella capacità di calcolo. Alla base del qubit c’è sempre un sistema fisico quantistico. Potrebbe trattarsi di un fotone che può presentare due stati di polarizzazione alternativi (orizzontale o verticale) dopo una misura.

In meccanica quantistica, lo stato di un sistema quantistico è definito rispetto ad un insieme di osservabili, chiamati operatori osservabili. Questi operatori sono associati a grandezze fisiche che si possono misurare sperimentalmente, come la posizione, l’energia, lo spin, etc.

Quando misuriamo una di queste grandezze, lo stato del sistema collassa in uno stato che corrisponde all’autovalore dell’operatore osservabile misurato, e la probabilità di ottenere un dato autovalore è data dalla probabilità associata allo stato del sistema.

Pertanto, possiamo dire che uno stato quantistico descrive solo la situazione di un sistema rispetto alle osservabili specifiche a cui è associato.

è importante notare che il concetto di qubit non è limitato solo all’elettrone con spin, ma può essere esteso a qualsiasi sistema quantistico che possa essere rappresentato come una sovrapposizione lineare di due stati di base.

L’esempio dei fotoni e il formalismo matematico

Due fotoni costituiscono due sistemi distinti. Ciascun fotone può essere descritto da uno stato quantistico che rappresenta il suo stato di polarizzazione, frequenza, fase, e così via. Quando i due fotoni interagiscono, è possibile descrivere il sistema complessivo dei due fotoni come un sistema quantistico a due particelle, ma in generale i fotoni possono essere considerati come sistemi separati.

Dati due fotoni singolarmente possono presentare due alternativi stati di polarizzazione (verticale/orizzontale : 0/1). Lo stato del sistema dei due fotoni complessivamente può essere una sovrapposizione dei 4 stati possibili di definita polarizzazione e si indica matematicamente mediante la seguente combinazione lineare:

|ψ⟩ = α|0⟩|0⟩ + β|0⟩|1⟩ + γ|1⟩|0⟩ + δ|1⟩|1⟩ = α|00⟩ + β|01⟩ + γ|10⟩ + δ|11⟩

con la condizione di normalizzazione:

|α|² + |β|² + |γ|² + |δ|² = 1

|00⟩ é lo stato in cui entrambi i fotoni risultano polarizzati verticalmente
|01⟩ é lo stato in cui il primo fotone è polarizzato verticalmente e il secondo lo è orizzontalmente
|10⟩ é lo stato in cui il primo fotone è polarizzato orizzontalmente e il secondo lo è verticalmente
|11⟩ é lo stato in cui entrambi i fotoni risultano polarizzati orizzontalmente

L’azione della misura del valore di un’osservabile fisica viene matematicamente rappresentata dall’azione di un operatore M nel modo seguente

M|s⟩ = λ|s⟩
dove λ é il valore (si dice autovalore) della misura e |s⟩ é lo stato (si dice autostato) del sistema fisico dopo la misura.

|s⟩ è rappresentabile come un vettore. Per esempio lo stato |1⟩ del fotone polarizzato orizzontalmente può corrispondere al vettore di dimensione due (0,1)T mentre |0⟩ può corrispondere al vettore di diemensione due: (1,0)T. Dove “T” indica la trasposizione del vettore riga, quindi un vettore colonna.

Gli operatori che esprimono un’azione su questi stati sono rappresentabili come matrici. Così che lo stato finale è rappresentabile matematicamente mediante un’operazione prodotto tra la matrice dell’operatore ed il vettore di stato.

Per esempio l’operatore Mx che misura la polarizzazione orizzontale del fotone è associato alla matrice

Mx :

Mx |1⟩ = λ|1⟩ con λ=1

l’operazione avviene riga per colonna:

l’operatore My che misura la polarizzazione verticale del fotone è associato alla matrice My

My |0⟩ = λ|0⟩ con λ=1

Se applichiamo l’operatore Mx alla stato |0> di polarizzazione verticale del fotone,non otteniamo ovviamente alcuno stato:

Mx|0> = 0

In altre parole, la probabilità di ottenere un fotone polarizzato orizzontalmente dopo la misura della polarizzazione orizzontale su uno stato di polarizzazione verticale è zero.

Nella pratica le operazioni di misura rappresentate dagli operatori Mx e My si possono effettuare mediante dei polarizzatori orientati orizzontalmente e verticalmente. Se il fotone attraversa il polarizzatore orientato O/V avrà polarizzazione O/V se invece viene assorbito avrà polarizzazione opposta.

Se lo stato del fotone è in una sovrapposizione di stati della base rappresentabile mediante questa combinazione lineare già vista:

|ψ⟩ = α|0⟩ + β|1⟩

per cui vale |α|² + |β|² = 1

allora l’azione della misura della polarizzazione orizzontale è rappresentata dalla seguente operazione che discende da quelle precedentemente introdotte e dalla proprietà della linearità:

Mx|ψ⟩ = α Mx|0⟩ + β Mx|1⟩ = βλ|1⟩ = β|1⟩

la quale mostra che a seguito della misura di polarizzazione orizzontale se il fotone non viene assorbito dal polarizzatore si troverà ora nello stato di polarizzazione orizzontale. Tale risultato è ottenibile con una probabilità |β|², mentre la probabilità che mostri una polarizzazione verticale e che quindi venga assorbito é |α|². In termini matematici si può dire che il vettore di stato |ψ⟩ è stato proiettato sul vettore |1⟩ della base e la sua componente rispetto a quella base è β

l’azione della misura della polarizzazione verticale è rappresentata dalla seguente operazione:

My|ψ⟩ = α My|0⟩ + β My|1⟩ = αλ|0⟩ = α|0⟩

che mostra che a seguito della misura di polarizzazione verticale se il fotone non viene assorbito dal polarizzatore si troverà ora nello stato di polarizzazione verticale e tale risultato è ottenibile con una probabilità |α|², mentre la probabilità che il fotone mostri una polarizzazione verticale e che quindi venga assorbito é quella complementare |β|². In termini matematici si può dire che il vettore |ψ⟩ è stato proiettato sul vettore |0⟩ della base e la sua componente rispetto a quella base è α

Lo stato di due particelle (2 qubit)

due particelle considerate come sistemi fisici indipendenti possono presentarsi in 4 stati possibili, ognuno dei quali è identificabile matematicamente con vettori di dimensione 4 (2 x 2).
Lo stato di due particelle separate |10⟩ é rappresentabile mediante il vettore di dimensione 4: (0,0,1,0)T, Lo stato di due particelle |11⟩ é rappresentabile mediante il vettore (0,0,0,1)T e così via. Gli operatori che agiscono su questi stati sono rappresentabili mediante matrici di dimensione 4×4

In generale N qubit indipendenti presentano 2N stati possibili e possono essere rappresentati da vettori di dimensione 2N

Cenni sul prodotto tensoriale

Quello che abbiamo visto è una rappresentazione matematica che si avvale del prodotto tensoriale. Due qubit separati vengono rappresentati come un prodotto tensoriale degli stati dei due qubit poiché il formalismo del prodotto tensoriale ci consente di descrivere in modo elegante e compatto il comportamento di un sistema composto da due sottosistemi indipendenti.

Il prodotto tensoriale tra due spazi vettoriali ci consente di costruire uno spazio vettoriale più grande che rappresenta l’insieme di tutte le possibili combinazioni lineari tra i vettori dei due spazi. Questa costruzione è utile per descrivere il comportamento di un sistema composto da due sottosistemi indipendenti, come due qubit separati.

Ad esempio, se abbiamo due qubit, rappresentati dai vettori di stato |ψ1⟩ e |ψ2⟩, possiamo descrivere lo stato del sistema composto da entrambi i qubit come il prodotto tensoriale dei due vettori di stato:

|ψ⟩ = |ψ1⟩ ⊗ |ψ2⟩

In questo modo, il vettore di stato del sistema composto è rappresentato come un vettore colonna di dimensione 4×1 (in quanto ciascun qubit è rappresentato da un vettore colonna di dimensione 2×1). La notazione del prodotto tensoriale ci permette di descrivere in modo compatto lo stato del sistema composto da due qubit separati e di effettuare operazioni su di essi utilizzando le proprietà del prodotto tensoriale.

Se uno stato può essere espresso come il prodotto tensoriale di due stati a singolo qubit, allora i due qubit sono in uno stato separabile, cioè non entangled. In questo caso, i due qubit esistono in modo indipendente l’uno dall’altro e non c’è correlazione tra di essi.

se abbiamo due vettori |a⟩ e |b⟩, di dimensione n e m rispettivamente, il loro prodotto tensoriale |a⟩ ⊗ |b⟩ è un vettore di dimensione n x m, che può essere costruito prendendo tutte le possibili combinazioni dei coefficienti dei due vettori. In altre parole, se |a⟩ = [a1, a2, …, an]^T e |b⟩ = [b1, b2, …, bm]T, dove “T” indica la trasposizione del vettore riga, quindi un vettore colonna, allora il prodotto tensoriale tra i due vettori è dato da:

|a⟩ ⊗ |b⟩ = [a1b1, a1b2, …, a1bm, a2b1, a2b2, …, a2bm, …, anb1, anb2, …, anbm]T

Ad esempio, se abbiamo i due vettori |0⟩ = (1, 0)T e |1⟩ = (0, 1)T, il loro prodotto tensoriale |0⟩ ⊗ |1⟩ sarà:

|0⟩ ⊗ |1⟩ = [0, 1, 0, 0]T

In generale, il prodotto tensoriale tra due vettori |a⟩ e |b⟩ di dimensione n e m rispettivamente è un vettore di dimensione n x m, che ha come elementi tutti i prodotti possibili tra gli elementi di |a⟩ e gli elementi di |b⟩, disposti in modo appropriato.

quindi quando scriviamo lo stato |abc⟩ intendiamo lo stato rappresentabile mediante il seguente prodotto tensoriale: |a⟩ ⊗ |b⟩ ⊗ |c⟩

Lo stato di tre particelle (3 qubit)

tre particelle indipendenti possono presentarsi in 8 stati possibili, ognuno dei quali è identificabile matematicamente con vettori di dimensione 8 (2 x 2 x 2)

Ricordiamo che lo stato |1⟩ del fotone polarizzato orizzontalmente corrisponde al vettore di dimensione due (0,1)t mentre |0⟩ corrisponde al vettore di diemensione due: (1,0)t

Gli stati del sistema di tre qubit sono:

|100⟩ = |1⟩ ⊗ |0⟩ ⊗ |0⟩ è il vettore (0,1)T ⊗ (1,0)T ⊗ (1,0)T = (0,0,1,0)T ⊗ (1,0)T = (0,0,0,0,1,0,0,0)T
|110⟩ = |1⟩ ⊗ |1⟩ ⊗ |0⟩ è il vettore (0,1)T ⊗ (0,1)T ⊗ (1,0)T = (0,0,0,1)T ⊗ (1,0)T = (0,0,0,0,0,0,1,0)T
|111⟩ = |1⟩ ⊗ |1⟩ ⊗ |1⟩ è il vettore (0,1)T ⊗ (0,1)T ⊗ (0,1)T = (0,0,0,1)T ⊗ (0,1)T = (0,0,0,0,0,0,0,1)T
|101⟩ = |1⟩ ⊗ |0⟩ ⊗ |1⟩ è il vettore (0,1)T ⊗ (1,0)T ⊗ (0,1)T = (0,0,1,0)T ⊗ (0,1)T = (0,0,0,0,0,1,0,0)T
|010⟩ = |0⟩ ⊗ |1⟩ ⊗ |0⟩ è il vettore (1,0)T ⊗ (0,1)T ⊗ (1,0)T = (0,1,0,0)T ⊗ (1,0)T = (0,0,1,0,0,0,0,0)T
|000⟩ = |0⟩ ⊗ |0⟩ ⊗ |0⟩ è il vettore (1,0)T ⊗ (1,0)T ⊗ (1,0)T = (1,0,0,0)T ⊗ (1,0)T = (1,0,0,0,0,0,0,0)T
|011⟩ = |0⟩ ⊗ |1⟩ ⊗ |1⟩ è il vettore (1,0)T ⊗ (0,1)T ⊗ (0,1)T = (0,1,0,0)T ⊗ (0,1)T = (0,0,0,1,0,0,0,0)T
|001⟩ = |0⟩ ⊗ |0⟩ ⊗ |1⟩ è il vettore (1,0)T ⊗ (1,0)T ⊗ (0,1)T = (1,0,0,0)T ⊗ (0,1)T = (0,1,0,0,0,0,0,0)T

Un sistema di tre qubit può trovarsi anche in uno stato di sovrapposizione di tutti questi stati:

|ψ⟩ = a|100⟩ + b|110⟩ + c|111⟩ + d|101⟩ + e|010⟩ + f|000⟩ + g|011⟩ + h|001⟩

Gli operatori che agiscono su questi stati sono rappresentabili mediante matrici di dimensione 8×8

Stati entangled

Lo stato entangled, o “stato quantistico correlato“, è un tipo di stato quantistico in cui due o più particelle fisiche sono strettamente correlate tra loro, in modo che le proprietà di una particella dipendano dalle proprietà delle altre particelle.

Per generare uno stato entangled tra due particelle fisiche, è possibile utilizzare un processo chiamato “entanglement” o “intricazione quantistica”. Questo processo richiede che le due particelle vengano inizializzate in uno stato quantistico specifico, che può essere fatto ad esempio utilizzando un laser o altri metodi di manipolazione quantistica.

Una volta che le particelle sono inizializzate nello stato quantistico corretto, il processo di entanglement prevede che le particelle vengano fatte interagire tra loro, in modo che le loro proprietà diventino strettamente correlate. Questo può essere fatto, ad esempio, utilizzando campi elettromagnetici o altri metodi di manipolazione quantistica.

Una volta che le particelle sono entangled, qualsiasi misura effettuata su una particella influirà sullo stato dell’altra particella, anche se le particelle sono fisicamente separate l’una dall’altra. Questa caratteristica è nota come “non-località” e rappresenta una delle proprietà fondamentali della meccanica quantistica.

Come si traduce l’entanglement in termini matematici?

uno stato entangled di due qubit non può essere descritto come un prodotto tensoriale di due stati singoli qubit. Ad esempio, uno stato entangled di due qubit potrebbe essere scritto come:

|ψ⟩ = α|00⟩ + β|11⟩

dove α e β sono numeri complessi che soddisfano la condizione di normalizzazione: |α|2 + |β|2 = 1. In questo caso, lo stato dei due qubit è descritto come una combinazione lineare di due stati di base: |00⟩ e |11⟩.

Questa rappresentazione non può essere decomposta in un prodotto tensoriale di due stati singoli qubit, come si può facilmente verificare. Infatti, se si suppone che esista una decomposizione del tipo (forma generale per stati disaccoppiati):

|ψ⟩ = (a|0⟩ + b|1⟩) ⊗ (c|0⟩ + d|1⟩)

allora si può espandere il prodotto tensoriale e confrontare con la definizione di |ψ⟩. Si ottiene:

|ψ⟩ = ac|00⟩ + ad|01⟩ + bc|10⟩ + bd|11⟩

Nonostante la decomposizione potrebbe avere infiniti termini, questa non può mai generare lo stato entangled |ψ⟩, che ha solo due termini. Pertanto, uno stato entangled di due qubit non può essere scritto come un prodotto tensoriale di due stati a singolo qubit.

In sintesi la forma generale di una decomposizione dello stato di due qubit è
|ψ⟩ = α|00⟩ + β|01⟩ + γ|10⟩ + δ|11⟩
|α|² + |β|² + |γ|² + |δ|² = 1

questa comprende casi di stati entanlged e non

mentre la forma di una decomposizione dello stato di due qubit disaccoppiati è
|ψ⟩ = (a|0⟩ + b|1⟩) ⊗ (c|0⟩ + d|1⟩)

Manipolazione degli stati quantistici

In generale con N qubit si possono ottenere 2N stati, come nel caso dei bit classici, ma la differenza fondamentale è che mentre i bit classici possono assumere solo uno stato definito (0 o 1) per volta, i qubit possono essere in sovrapposizione di più stati simultaneamente. Ciò significa che possono essere in una combinazione lineare di due o più stati, con coefficienti complessi che soddisfano la condizione di normalizzazione. Queste combinazioni lineari sono essenziali per la realizzazione di algoritmi quantistici, poiché consentono di eseguire calcoli paralleli su più stati simultaneamente, il che consente una maggiore efficienza computazionale rispetto ai calcoli su bit classici.

Oltre alla misura di una data osservabile fisica esistono altre azioni effettuabili su un sistema fisico che sono in grado di cambiarlo, inducendo una trasformazione della combinazione lineare degli stati e sono proprio queste trasformazioni che permettono di effettuare operazioni in paralello in grado di rendere più efficienti molti calcoli. Vediamo come.

Gli operatori unitari

Un altro sistema fisico che può essere utilizzato come qubit in un computer quantistico è l’oscillatore armonico quantistico. L’oscillatore armonico quantistico è un modello fisico utilizzato per descrivere il comportamento di un sistema fisico che oscilla attorno a una posizione di equilibrio, come ad esempio un atomo di idrogeno o un cristallo.

In questo caso, il qubit è rappresentato da uno stato di eccitazione del livello energetico dell’atomo, che può essere in uno stato di base o in uno stato eccitato. Questi stati, come abbiamo già mostrato, possono essere rappresentati matematicamente come i vettori di base di uno spazio vettoriale (di Hilbert) a due dimensioni, ovvero:

|0⟩ = (1,0)T
|1⟩ = (0,1)T

Gli operatori matematici che manipolano lo stato del qubit sono matrici unitarie U, ovvero matrici quadrate con determinante 1 e che soddisfano l’uguaglianza U†U = UU† = I, dove I è l’identità e U† é l’operatore aggiunto dell’operatore U il suo trasposto coniugato. Tale condizione garantisce che la trasformazione conservi la condizione di normalizzazione e quindi che preservi la probabiltà totale uguale a 1.

U† = (UT)*

dove UT è la trasposta di U e * indica l’operazione di complesso coniugato.

Ad esempio, se U è una matrice 2×2:

allora la matrice U† è definita come:

dove a* è il numero complesso coniugato di a, etc.

Gli operatori più comuni in un computer quantistico sono gli operatori di Pauli X, Y e Z, che corrispondono a rotazioni di 180 gradi attorno agli assi x, y e z dell’equatore della sfera di Bloch (Ogni punto sulla sfera di Bloch rappresenta uno stato quantistico possibile per un elettrone) che rappresenta graficamente lo stato del qubit.

Ad esempio, l’operatore di Pauli X può essere rappresentato come la matrice:

Questo operatore corrisponde a una rotazione di 180 gradi attorno all’asse x della sfera di Bloch. Se applichiamo l’operatore di Pauli X allo stato |0⟩, otteniamo:

X|0⟩ = |1⟩

Ciò significa che applicando l’operatore X allo stato |0⟩ otteniamo lo stato |1⟩, ovvero l’eccitazione dell’oscillatore armonico quantistico.

Gli operatori sono implementati sperimentalmente utilizzando vari componenti dell’hardware, come ad esempio i circuiti di controllo quantistici e i gate quantistici, che manipolano fisicamente gli stati dei qubit. Il numero e il tipo di operatori utilizzati dipendono dalle specifiche dell’hardware del computer quantistico.

Il sistema può essere manipolato tramite l’applicazione di porte quantistiche, che agiscono sulla sovrapposizione degli stati. Tuttavia, la manipolazione dello stato non altera la natura della sovrapposizione degli stati.

Il collasso della funzione d’onda quantistica avviene solo durante la misura del sistema. Quando si effettua una misura su un sistema quantistico, la sovrapposizione degli stati quantistici si interrompe e il sistema collassa su uno stato quantistico definito. Il risultato della misura dipende dalle ampiezze di probabilità associate a ciascun stato quantistico nella sovrapposizione.

Durante la manipolazione del sistema quantistico tramite le porte quantistiche, lo stato quantistico viene modificato, ma la condizione di sovrapposizione degli stati quantistici rimane intatta pur variando i coefficienti della combinazione lineare degli stati.

L’esempio della porta di Hadamard

Ad esempio, se un sistema quantistico si trova in uno stato di sovrapposizione tra due stati quantistici |0⟩ e |1⟩, la sua descrizione, come abbiamo già più volte mostrato, può essere scritta come una combinazione lineare dei due stati: α|0⟩ + β|1⟩, dove α e β sono coefficienti complessi.

L’applicazione di una porta quantistica come la porta di Hadamard a questo sistema può modificarne i coefficienti di sovrapposizione, generando una nuova sovrapposizione tra gli stati quantistici. Tuttavia, la combinazione lineare degli stati quantistici che descrive il sistema rimane invariata. Il sistema continua a essere descritto come una combinazione lineare degli stati quantistici |0⟩ e |1⟩, anche se i coefficienti α e β possono essere modificati dalla porta di Hadamard.

L’operatore Hadamard H è definito come segue:

Quando viene applicato l’operatore Hadamard a un qubit nello stato di sovrapposizione α|0⟩ + β|1⟩, si ottiene:

H(α|0⟩ + β|1⟩) = H (α, β)T = 1/√2 * (α + β; α – β)T

Quindi, lo stato del qubit è diventato uno stato di sovrapposizione diverso, specificamente:

1/√2 * (α + β)|0⟩ + 1/√2 * (α – β)|1⟩

Questo stato è noto come lo stato di sovrapposizione di Hadamard. In questo stato, la probabilità di osservare 0 o 1 è uguale e pari a 1/2.

Altri operatori

Di seguito sono elencati alcuni degli operatori matematici associati alle porte logiche più comuni utilizzate nei computer quantistici:

Porta di Pauli X: rappresenta un’operazione di flip bit e viene rappresentata dalla matrice:

Porta di Pauli Y: rappresenta una combinazione di flip bit e rotazione di fase ed è rappresentata dalla matrice:

Porta di Pauli Z: rappresenta una rotazione di fase e viene rappresentata dalla matrice:

Questi sono solo alcuni degli operatori matematici associati alle porte logiche quantistiche più comuni. Esistono anche altre porte logiche quantistiche, come la porta di Toffoli e la porta di CNOT, che hanno operatori matematici associati più complessi.

Un esempio semplice di calcolo quantistico con due qubit può essere quello di applicare la porta CNOT (Controlled NOT) a un qubit di controllo e a un qubit di bersaglio. Questo operatore è definito come:

così che determina queste trasformazioni:

|00⟩ → |00⟩
|01⟩ → |01⟩
|10⟩ → |11⟩
|11⟩ → |10⟩

Questo significa che se il primo qubit è in stato |1⟩, il secondo qubit viene invertito. Se il primo qubit è in stato |0⟩, il secondo qubit rimane invariato.

Ad esempio, se abbiamo due qubit inizializzati nello stato |00⟩, possiamo applicare la porta CNOT con il primo qubit come controllo e il secondo qubit come bersaglio. Lo stato risultante sarà:

CNOT|00⟩ = |00⟩

Se invece il primo qubit è nello stato |1⟩, lo stato risultante sarà:

CNOT|10⟩ = |11⟩

Possiamo anche combinare l’operatore CNOT con la porta X, che corrisponde a un’operazione di inversione del qubit. Ad esempio, se applichiamo la porta X al primo qubit e poi la porta CNOT con il primo qubit come controllo e il secondo qubit come bersaglio, lo stato risultante sarà:

CNOT(X|10⟩) = CNOT|11⟩ = |10⟩

Questo esempio mostra come l’applicazione di uno o due operatori quantistici può modificare lo stato dei qubit in modo efficiente e preciso, consentendo di effettuare calcoli paralleli su più stati contemporaneamente.

Manipolazione degli stati, facile come ruotare una sfera

Un modo per comprendere meglio la funzione delle porte quantistiche e quindi degli operatori ad esse associati può essere quello di immaginare una sfera che rappresenta lo stato quantistico di un singolo qubit. Ogni punto sulla sfera corrisponde a uno stato quantistico specifico.

Immagina che la sfera sia divisa in parti uguali, ognuna delle quali rappresenta una probabilità uguale di trovare il qubit in uno stato specifico. Ora, se conosci come applicare gli operatori quantistici (come la porta X, Y, Z, ecc.), puoi modificare la posizione del punto sulla sfera, corrispondente allo stato quantistico del qubit, per effettuare calcoli quantistici.

Ad esempio, l’applicazione della porta X al qubit corrisponde a un’operazione di rotazione della sfera attorno all’asse x. Questo modifica la posizione del punto sulla sfera, il che corrisponde alla modifica dello stato quantistico del qubit. Puoi quindi usare queste rotazioni per effettuare calcoli quantistici, sfruttando la sovrapposizione quantistica e le ampiezze corrispondenti.

Le porte logiche quantistiche, come le porte di Pauli, le porte di Hadamard, le porte di fase, le porte di rotazione e le porte di controllo, possono essere implementate utilizzando differenti tecnologie hardware.

Ad esempio, una tecnologia molto utilizzata per la realizzazione di porte logiche quantistiche è quella basata su qubit superconduttivi, in cui i qubit sono realizzati attraverso circuiti di Josephson su chip di silicio. Questa tecnologia è stata utilizzata per la realizzazione di computer quantistici come quello di IBM e di Google.

UN ESEMPIO DI COMPUTAZIONE QUANTISTICA

premessa

Prima di mostrare un esempio di come la computazione quantistica sia più efficiente di quella classica, introduciamo in modo assolutamente non rigoroso i concetti di prodotto scalare tra due vettori, di operatore di proiezione e di base ortonormale.

Dati i due vettori di dimensione 2: |v> = (a,b)T e |w> = (c,d)T espressi tramite le componenti (numeri complessi) della base ortonormale, il loro prodotto scalare si calcola nel seguente modo:

<v|w>= a* c + b* d
dove a* è il coniugato complesso di a e b* è il coniugato complesso di b.

In un sistema ad un solo qubit i due vettori della base ortonormale sono |0> = (1,0)T e |1> = (0,1)T per cui vale

<0|0> = 1
<0|1> = <1|0>* = 0
<1|1> = 1

Tali vettori generano uno spazio vettoriale di 2 dimensioni

i vettori della base risultano indipendenti nel senso che nessuno di essi è esprimibile come combinazione lineare degli altri. Inoltre l’insieme dei vettori della base é completo nel senso che qualsiasi vettore (tranne i vettori della base stessa) dello spazio vettoriale da essi generato può essere espresso come una combinazione lineare dei vettori della base stessa.

I vettori prima introdotti si possono indicare anche nel seguente modo:
|v> = a|0> + b|1>
|w> = c|0> + d|1>

possono diventare anche operatori. In questo caso si indicano così:
<v| = a<0| + b<1|
<w| = c<0| + d<1|

questi operatori agiscono su un vettore per restituire un numero, un prodotto scalare.
se |v> si rappresenta come un vettore colonna (a,b)T
<v| si rappresenta come un vettore riga (a,b)

In un sistema a due qubit i quattro vettori della base ortonormale sono
|00⟩ = (1,0,0,0)T
|01⟩ = (0,1,0,0)T
|10⟩ = (0,0,1,0)T
|11⟩ = (0,0,0,1)T

Essi generano uno spazio vettoriale di 4 dimensioni

Per cui varranno le seguenti

<00|00> = 1
<11|11> = 1
<01|01> = 1
<10|10> = 1

tutte le altre combinazioni di prodotto scalare tra vettori diversi sono nulle.

Un generico vettore |s> dello spazio vettoriale può essere espresso come combinazione lineare dei vettori della base:
|s> = a|00⟩ + b|01⟩ + c|10⟩ + d|11⟩

oppure può essere visto come operatore espresso nella base di operatori <00|, <01|, <10|, <11|
<s| = a<00| + b<01| + c<10| + d<11|

questi operatori agiscono su un vettore per restituire un numero

L’operatore di proiezione, proietta un vettore su un altro vettore e restituisce un vettore

Per esempio l’operatore seguente
P = |11><11|

se applicato al vettore |s> = a|00⟩ + b|01⟩ + c|10⟩ + d|11⟩

P|s> = |11> (<11|a|00⟩ + <11|b|01⟩ + <11|c|10⟩ + <11|d|11⟩) = |11> (a<11|00⟩ + b<11|01⟩ + c<11|10⟩ + d<11|11⟩) = = |11> (0 + 0 + 0 + dx1) = d|11>

il vettore |s> é stato proiettato sul vettore della base |11> e il risultato è il vettore d|11>

Abbiamo le informazioni necessarie per capire l’algoritmo di Grover

L’algoritmo di Grover

L’algoritmo di Grover è un algoritmo di ricerca quantistico che consente di trovare un elemento specifico all’interno di un database non ordinato. Questo algoritmo è noto per la sua capacità di fornire un vantaggio quadratico rispetto agli algoritmi classici di ricerca.

Supponiamo di avere un database non ordinato di N elementi e di voler cercare un elemento specifico all’interno del database. In un algoritmo classico, la ricerca richiederebbe in media N/2 tentativi. Invece, utilizzando l’algoritmo di Grover, è possibile trovare l’elemento in un tempo proporzionale a √N.

L‘algoritmo di Grover sfrutta la sovrapposizione quantistica per effettuare una ricerca parallela su tutti gli elementi del database contemporaneamente. In pratica, si prepara un registro quantistico in uno stato di sovrapposizione degli indici degli elementi del database e si applica una serie di porte quantistiche per amplificare l’ampiezza dell’elemento cercato. Infine, si esegue una misura sul registro quantistico per identificare l’elemento cercato.

Il seguente è uno schema generale dell’algoritmo di Grover:

1 – Preparazione di un registro quantistico di n qubit inizializzato nello stato |00..⟩.

2 – Applicazione di una serie di porte di Hadamard a tutti i qubit del registro quantistico. Questa operazione mette il registro in uno stato di sovrapposizione uniforme.

3- Applicazione di un marcatore in modo da segnare lo stato desiderato. L’operatore di marcatura può essere implementato attraverso un circuito quantistico che agisce sul registro quantistico del database e che “marchia” l’elemento desiderato attraverso l’applicazione di un’operazione che cambia lo stato dell’elemento desiderato. Questa operazione può essere realizzata utilizzando una porta di fase, una porta di rotazione o una combinazione di queste.

4 – Applicazione dell’operatore di Grover G che amplifica l’ampiezza dell’elemento cercato e diminuisce l’ampiezza degli altri elementi. L’operatore di Grover è definito come G = 2|s⟩⟨s| – I, dove |s⟩ è lo stato medio dei vettori che rappresentano gli elementi del database e I è l’operatore identità. L’operatore G è applicato m volte, dove m è un parametro che dipende dal numero di elementi del database.

5- Ripeti l’operazione 2 3 e 4 un numero di volte k ∼ √N, dove N è il numero di elementi del database.

6- Esecuzione di una misura sul registro quantistico. La misura produce uno degli N possibili risultati. Se l’elemento cercato è stato trovato, la misura produce il risultato corrispondente all’indice dell’elemento. Altrimenti, la misura produce un risultato casuale con una probabilità molto bassa.

caso semplice : un database di 4 elementi

Per capire come l’algoritmo di Grover sfrutta la sovrapposizione quantistica, consideriamo un database di 4 elementi: {A, B, C, D}. Possiamo rappresentare ciascun elemento del database con due bit: A = 00, B = 01, C = 10, D = 11. Possiamo quindi rappresentare il database con un registro quantistico di 2 qubit in uno stato di sovrapposizione degli stati |00⟩, |01⟩, |10⟩ e |11⟩.

Inizialmente, il registro quantistico è impostato nello stato |00⟩.

Applichiamo quindi una porta di Hadamard a ciascun qubit per mettere il registro in uno stato di sovrapposizione uniforme:

Applichiamo l’operatore di marcatura, che inverte lo stato dell’elemento cercato 11 L’operatore di marcatura dell’oracolo può essere definito come segue:

M = I – 2|11⟩⟨11|

L’operatore di marcatura può essere applicato allo stato ∣ψ1⟩

∣ψ2⟩=M∣ψ1⟩

Lo scopo dell’operatore di marcatura è quella di invertire lo stato dell’elemento cercato in modo che l’operatore di Grover sia poi in grado di riconoscerlo e di incrementare la sua ampiezza. Dopo l’applicazione dell’operatore di marcatura, lo stato del registro quantistico diventa:

∣ψ2⟩=1/2(∣00⟩+∣01⟩+∣10⟩−∣11⟩)

L’Operatore di Grover è G = 2|s⟩⟨s| – I

dove |s⟩ è lo stato simmetrico dato da:
|s⟩ = 1/2(|00⟩ + |01⟩ + |10⟩ + |11⟩)

Per calcolare G∣ψ2⟩, dobbiamo prima calcolare |s⟩⟨s|∣ψ2⟩ e successivamente moltiplicare per 2 e sottrarre l’identità I∣ψ2⟩.

si può iniziare con il calcolare ⟨s|ψ2⟩

⟨s|ψ2⟩ = 1/2 (⟨00| + ⟨01| + ⟨10| + ⟨11|) 1/2(∣00⟩+∣01⟩+∣10⟩−∣11⟩)

i prodotti scalari misti danno zero, quindi restano solo quelli tra gli stessi vettori della base che valgono 1:

⟨s|ψ2⟩ = 1/4 (1+1+1-1) = 1/2

quindi

|s⟩⟨s|∣ψ2⟩ = (⟨s|∣ψ2⟩)|s⟩ = (1/2) (1/2)(|00⟩ + |01⟩ + |10⟩ + |11⟩) = 1/4 (|00⟩ + |01⟩ + |10⟩ + |11⟩)

G|∣ψ2 ⟩= (2|s⟩⟨s| – I)|∣ψ2⟩ = 2|s⟩⟨s|∣ψ2⟩ – ∣ψ2⟩ = 1/2 (|00⟩ + |01⟩ + |10⟩ + |11⟩) – 1/2(∣00⟩+∣01⟩+∣10⟩−∣11⟩) = ∣11⟩

Come si può vedere, l’operatore fa aumentare il coefficiente di |11⟩ e diminuisce quello degli altri come previsto.

Nel caso di un database di soli 4 elementi e con l’elemento di marcatura |11⟩, l’operatore di Grover applicato all’operatore di marcatura applicato allo stato iniziale |00⟩ ha accresciuto l’ampiezza in modo significativo dello stato di interesse |11⟩ dopo una singola iterazione. Questo è dovuto alla dimensione del problema, che in questo caso è così piccolo che è possibile trovare l’elemento di marcatura con una sola iterazione.

In generale, il numero di iterazioni richieste per trovare l’elemento di marcatura dipende dalla dimensione del database e dal numero di elementi di marcatura presenti. Con un numero maggiore di elementi, può essere necessario ripetere l’operatore di Grover un numero maggiore di volte per amplificare l’ampiezza dell’elemento di marcatura e trovare la soluzione.

L’algoritmo di Grover è più efficiente della ricerca lineare classica perché utilizza la sovrapposizione degli stati e l’interferenza quantistica per eseguire la ricerca in modo più efficiente.

Nella ricerca lineare classica, se si ha un database di N elementi, il numero di operazioni richieste per trovare un elemento specifico del database è N. In altre parole, è necessario controllare ogni elemento del database per trovare quello desiderato. Questo rende la ricerca lineare inefficiente, specialmente quando il database diventa grande.

Invece, come già si è anticipato, l’algoritmo di Grover utilizza la sovrapposizione degli stati per eseguire la ricerca in parallelo su tutti gli elementi del database. Inoltre, l’operatore di Grover amplifica l’ampiezza dell’elemento desiderato e diminuisce l’ampiezza degli altri elementi del database, il che significa che dopo un numero relativamente piccolo di iterazioni dell’algoritmo, la probabilità di trovare l’elemento desiderato diventa molto alta. Ciò significa che l’algoritmo di Grover richiede solo circa √N operazioni per trovare l’elemento desiderato, il che lo rende molto più efficiente della ricerca lineare classica.

L’entanglament e la computazione quantistica

L’entanglement è uno dei concetti fondamentali della meccanica quantistica e svolge un ruolo essenziale nella computazione quantistica.

In un sistema di più qubit entangled, lo stato quantistico del sistema non può essere descritto come una combinazione di stati dei singoli qubit, ma solo come una sovrapposizione degli stati di tutti i qubit insieme. Ciò significa che, se si effettua una misura su uno dei qubit entangled, questa misura influenzerà lo stato degli altri qubit del sistema, anche se questi qubit si trovano a distanza.

L’entanglement viene sfruttato nella computazione quantistica per eseguire operazioni su più qubit in modo simultaneo, grazie alla creazione di stati entangled che rappresentano diverse combinazioni di stati possibili dei singoli qubit. In particolare, gli algoritmi quantistici sfruttano l’entanglement per effettuare operazioni su un gran numero di stati simultaneamente, aumentando notevolmente la velocità e l’efficienza dei calcoli.

Ad esempio, l’algoritmo di Shor per la fattorizzazione di numeri interi sfrutta l’entanglement per eseguire simultaneamente molte operazioni su numeri interi diversi, attraverso la creazione di uno stato quantistico entangled che rappresenta tutte le possibili combinazioni di fattori di questi numeri. In questo modo, l’algoritmo di Shor riesce a trovare i fattori di un numero intero molto più velocemente di quanto sarebbe possibile con un computer classico.

In sintesi, l’entanglement rappresenta uno strumento molto potente per la computazione quantistica, che consente di eseguire operazioni su più qubit simultaneamente e di effettuare calcoli in modo molto più efficiente rispetto ai computer classici.

Un esempio di stato entangled che abbiamo già incontrato è:

(|00⟩ + |11⟩) / sqrt(2)

Questo stato quantistico descrive due qubit che si trovano in una sovrapposizione quantistica degli stati |00⟩ e |11⟩, entangled tra di loro. In questo stato, la probabilità di trovare il primo qubit nello stato |0⟩ e il secondo qubit nello stato |0⟩ è pari a 1/2, così come la probabilità di trovare il primo qubit nello stato |1⟩ e il secondo qubit nello stato |1⟩ è pari a 1/2.

Per manipolare uno stato entangled come questo nella computazione quantistica, si utilizzano le porte logiche quantistiche, come ad esempio le porte di Pauli, le porte di Hadamard, le porte di fase, le porte di rotazione e le porte di controllo.

Ad esempio, per manipolare lo stato entangled sopra con una porta di Pauli-X sul primo qubit, si applica l’operazione X al primo qubit nello stato entangled, ottenendo:

(|10⟩ + |01⟩) / sqrt(2)

Questo nuovo stato quantistico descrive due qubit entangled tra di loro, ma con il primo qubit nello stato |1⟩ invece che |0⟩.

In questo modo, sfruttando l’entanglement e l’azione delle porte logiche quantistiche, è possibile manipolare stati quantistici complessi e svolgere operazioni su più qubit in modo simultaneo, aumentando notevolmente la velocità e l’efficienza dei calcoli nella computazione quantistica.