INFORMATICA - QUANTUM COMPUTING - PROGRAM 1

Ottobre 2023

1. Impostiamo un qbit e misuriamo

Facendo riferimento alle risorse IBM (https://quantum-computing.ibm.com) proviamo a impostare, in maniera molto elementare, sia in maniera grafica che per righe di codice, una linea con un qbit. Come si può facilmente intuire dalla figura che segue, il qbit lo consideriamo impostato a quantum-zero |0> (resettare il qbit). Inoltre il flusso della linea di comunicazione si deve pensare che procede da sinistra a destra.

Il QComposer IBM esegue automaticamente una serie di misurazioni sulla linea (a destra) e il risultato statistico della citata serie, in forma grafica, è banalmente il seguente:

Questo risultato è scontato in ambiente macroscopico (classico) ma non lo è minimamente dal punto di vista quantistico, nulla infatti esclude che talvolta come misurazione dello |0> possa presentarsi qualcosa di diverso da zero (questo è un fatto che in ambito quantistico va accettato in quanto nulla è completamente deterministico). Nell'ipotesi però di operare in un ambiente artificialmente perfetto e con l'idea di campionare la linea un certo numero limitato ma sufficientemente ampio di volte la probabilità frequentistica di avere zero in uscita è praticamente 100%. Come ho indicato nella pagina introduttiva esistono diversi modelli di programmazione quantistica, quella qui considerata è la gate-based, ossia ogni parte, dato, effetto o caratteristica del sistema quantistico è modellizzato mediante degli oggetti simili a delle porte logiche con un funzionamento, però, sostanzialmente diverso da quelle classiche digitali (avremo occasione di approfondire come funzionano specificamente le porte quantistiche in altre pagine di questo sito web, al momento ci limitiamo ad usarne alcune, come black box, per imparare a programmare).

2. Impostiamo la superposition dei valori di qbit

Una delle principali caratteristiche dei sistemi quantistici è la sovrapposizione degli stati. Considerando quantum-zero |0> e quantum-uno |1> ogni loro combinazione lineare con pesi complessi è ammissibile (purchè vengano soddisfatte particolari condizioni matematiche al momento non oggetto dello studio e comunque poco utili dal punto di vista della programmazione di base). Tale combinazione lineare viene svolta mediante proprio le porte quantistiche. Andiamo a considerare, in particolare, una porta quantistica fondamentale, quella di Hadamard H che combina |0> e |1> in maniera "perfettamente bilanciata":

La serie di misurazioni in uscita porta adesso il QComposer IBM a mostrare quanto segue:

In pratica la probabilità di misurare in uscita (osservare macroscopicamente come uscita dalla linea) zero o uno è 50%, quindi la porta H realizza a tutti gli effetti un ottimo randomizzatore binario. Questo schema, di fatto, è lo schema di fondo di un QRNG (Quantum Random Number Generator) binario, ossia generatore di numeri casuali binari quantistici. A partire da tale osservazione viene automatico pensare che questa particolare superposition non abbia nulla di speciale. Randomizzatori binari classici esistono infatti da tempo e sebbene non perfetti hanno ottime performance e non necessariamente ricorrono ad effetti o sistemi quantistici per funzionare. La differenza con i randomizzatori classici si può vedere, invece, molto chiaramente applicando un'altra porta H di seguito alla prima:

La misurazione, in tal caso, riporta sorprendentemente la stessa situazione iniziale quando la porta H non era affatto applicata:

Questo implica un assurdo in termini classici e macroscopici: randomizzare un bit porta ad un valore binario casuale e l'ulteriore randomizzazione di quest'ultimo realizza di nuovo un bit casuale. La porta H randomizza la prima volta ma recupera l'informazione iniziale la seconda partendo da quella apparentemente casuale (questo faceva uscire di testa molti dei fisici classici "attaccati" al mondo macroscopico). Il fatto viene compreso facilmente se si pensa che è la misura (macroscopica) ad essere percepita come casuale dall'osservatore mentre l'informazione quantistica (non direttamente osservabile macroscopicamente) è stata solo soggetta ad una combinazione lineare di valori per cui rimane in qualche modo intatta. Applicando H due volte le combinazioni lineari applicate sono due e riportano al punto di partenza il vettore qbit.

Nella randomness classica l'informazione di innesco della sequenza casuale viene gioco-forza persa per avere un aumento di entropia. In quella quantistica la randomness esiste solo agli occhi di un singolo osservatore per cui l'informazione di innesco si conserva (la teoria del multiverso fornisce un elegante descrizione di questo fenomeno).

Oltre a far venire il mal di testa, la sovrapposizione degli stati quantistici è un importante strumento di parallelizzazione dei calcoli quantistici che vedremo in diversi esempi ma non in questa pagina. Per i lettori più attenti lascio la semplice domanda: cosa accade se applico la porta H tre volte sulla linea? Cosa misura il QComposer IBM?

3. Impostiamo lo entanglement tra qbit

Consideriamo ora due qbit e resettiamoli entrambi a |0>. Per gestire la correlazione tra i valori dei qbit introduciamo la porta controlled-not ([CNOT]) che si può vedere di seguito:

Il funzionamento della [CNOT] è semplice da considerare, essa ha un qbit di ingresso (quello sulla linea in cui giace) e un qbit di controllo (quello ortogonale alla sua linea), in questo caso q[0] è il qbit di controllo e q[1] quello di ingresso. Se il qbit di controllo assume valore |1> allora quello di ingresso viene invertito (a dire il vero gli viene applicata una combinazione lineare che in molti casi opera in maniera similare, come idea, a una classica NOT) altrimenti la [CNOT] è come se sulla linea non esistesse proprio (restituisce il qbit d'ingresso senza modifiche). Ciò premesso non è difficile vedere la misurazione del QComposer IBM che segue (questa volta naturalmente su 2 qbit e quindi su 4 combinazioni di valori e non su 2 come prima):

L'unica combinazione che viene misurata frequentisticamente ora e sempre al 100% è 00 perchè la [CNOT] non si attiva (infatti il qbit di controllo è |0>).

Nello schema seguente, invece, imponiamo una not quantistica trasformando il qbit di controllo da |0> a |1> ed ecco che la misurazione al 100% si sposta sulla combinazione 11:

In definitiva q[0] e q[1] sono quantisticamente interdipendenti dopo aver applicato la [CNOT]. Per chiudere questa pagina introduttiva, che sono sicuro avrà lasciato molti dubbi ai lettori, voglio sottolineare che le linee e le porte quantistiche considerate, come modelli, non fanno riferimenti nè a tempo, nè a spazio. I due qbit potrebbero quindi, in base al modello, essere lontani a piacere l'uno dall'altro e gli effetti considerati continuerebbero a sussistere (ad esempio nei sistemi di comunicazione quantistici satellitari il qbit di controllo può essere a terra e quello di ingresso sul satellite...). Le porte quantistiche H e [CNOT] avrebbero tempo di propagazione del segnale zero secondo il modello, ossia sarebbero istantanee (nessun tempo di elaborazione). Nei computer quantistici e nelle sistemi di comunicazione quantistici reali (realizzati ed esistenti) ciò non è assolutamente verso: oltre una certa distanza gli effetti quantistici di sovrapposizione e correlazione si perdono e i tempi di propagazione sono finiti e non nulli. Il modello gate-based che usiamo qui, quindi è utile per programmare computer quantistici gate-based, ma bisogna tenere presente che rappresenta la realtà in maniera semplificata e approssimativa. In realtà questo non è niente di nuovo anche per chi programma in ambienti tradizionali, infatti, molti dei paradigmi classici di programmazione, se impiegati direttamente su un sistema vero, senza "intermediazioni e adattamenti", risultano lenti e/o poco efficaci; questo non toglie che tali paradigmi sono utili per imparare e quali punto di riferimento.