Nota redazionale SxT
La nostra web-nauta dichiara di avere già delle conoscenze avanzate sul computer quantistico e potrà quindi pienamente apprezzare la risposta fornita dal nostro esperto. A chi invece desidera partire dagli elementi di base suggeriamo la lettura preliminare di una breve scheda introduttiva .
Non è semplice definire le caratteristiche di un linguaggio di programmazione per un calcolatore quantistico per il semplice motivo che questo non è mai stato costruito se non in modo parziale e con una quantità di parti (qubit ) veramente piccola (minore di una decina). Sebbene tutte queste limitazioni costituiscano un limite molto serio, si deve osservare anche che molto lavoro è già stato dedicato alla costruzione di una teoria consistente del calcolo quantistico ed è quindi possibile tentare alcune previsioni attendibili.
Un calcolatore quantistico sarà utile solamente se potrà risolvere problemi pratici e quindi, accanto alle componenti quantistiche, che ne costituiscono il valore speciale, sarà importante curare la semplicità della sua utilizzazione pratica. Questa semplicità d’uso sarà probabilmente garantita da un’architettura ibrida in cui un calcolatore tradizionale controlla un calcolatore quantistico.
Il controllo della parte quantistica consiste nella preparazione dei dati d’ingresso e del programma da eseguire sul calcolatore quantistico e nella capacità di eseguire misure sullo stato del sistema quantistico durante oppure alla fine del calcolo quantistico. In base a tutte queste osservazioni si pensa che un qualsiasi linguaggio di programmazione tradizionale, procedurale e strutturato, può essere utilizzato direttamente per la gestione di questa macchina di calcolo ibrida e quindi per la programmazione quantistica. È ovvio che un linguaggio di questo tipo dovrà essere esteso per introdurre i tipi quantistici fondamentali quali il qubit, i registri quantistici e le funzioni tipiche dell’interazione con le componenti classiche quali la misura dei registri quantistici.
Il compilatore di questo linguaggio dovrà avere cura di generare un codice che soddisfi i vincoli quantistici, specifici dell’hardware quantistico, solo nelle porzioni di programma che non sono di pertinenza del calcolatore classico di controllo. Questi vincoli non sono molti, sebbene siano molto importanti, e consistono nel fatto che le operazioni quantistiche sullo stato del sistema quantistico devono essere unitarie (e quindi anche invertibili); da questo fatto discendono alcuni aspetti non intuitivi quali l’impossibilità di copiare direttamente il contenuto di un qubit in un altro qubit oppure l’impossibilità di azzerare il contenuto di un qubit.
È degno di nota il fatto che alcuni strumenti di gestione di un programma classico, come il debugging, non potranno essere utilizzati per studiare il funzionamento delle sezioni quantistiche di un programma perché la stampa del contenuto dei registri quantistici ne altererebbe irrimediabilmente il contenuto stesso (misura dello stato quantico). Esistono diverse versioni di linguaggi di programmazione per calcolatori quantistici. Una di queste è il QCL e il suo interprete è disponibile su rete, insieme alla libreria di simulazione del calcolatore quantistico stesso. Con questi strumenti è facile scrivere un programma quantistico per poi farlo girare sul simulatore. Questi simulatori riescono a mostrare le straordinarie proprietà dei calcolatori quantistici, quali la possibilità di memorizzare moltissimi dati in pochi qubit e di effettuare calcoli su tutti questi dati mediante l’intrinseco parallelismo quantistico, al prezzo dell’uso di grandi risorse di memoria e di calcolo. Si pensa quindi che, anche con i simulatori, non è praticamente possibile effettuare calcoli quantistici che utilizzino più di qualche decina di qubit.
È utile ricordare che un linguaggio di programmazione quantistica è solo uno strumento utile per gestire un calcolatore quantistico e le straordinarie caratteristiche di un calcolatore quantistico sono sfruttabili solamente se esistono degli algoritmi quantistici specifici. A questo riguardo, le ricerche hanno dato risultati sorprendenti in almeno due casi. Il primo caso è quello della ricerca di un elemento di una lista: se la lista contiene N elementi, questo problema può essere risolto in O(N) passi in un calcolatore classico mentre lo stesso problema richiede solamente O(vN) passi su un calcolatore quantistico in cui si usa l’algoritmo di Grover.
Il secondo caso è quello della scomposizione di un numero N nei suoi fattori primi: la migliore soluzione conosciuta di questo problema ha una complessità esponenziale su un calcolatore classico mentre richiede solo O((log(N))3) se si utilizza l’algoritmo di Shor su un calcolatore quantistico. L’impossibilità pratica della scomposizione di numeri molto grandi in fattori primi è la alla base della sostanziale indecifrabilità dei sistemi di crittografia a chiave pubblica, quali RSA o DH, che sono ritenuti algoritmicamente inattaccabili se il numero N è sufficientemente grande. Un calcolatore quantistico, con n qubit, potrebbe attaccare velocemente questi sistemi di crittografia e potrebbe decifrare tutti i messaggi velocemente, purché il numero dei qubit utilizzabili fosse maggiore del numero di bit utilizzati per la crittografia. Qui riappare l’importanza dell’aspetto tecnologico legato alla costruzione pratica di un calcolatore quantistico perché l’esistenza di limiti pratici al numero massimo di qubit renderebbe inutile la potenza dell’algoritmo quantistico di Shor. Per sconfiggere quest’ultimo basterebbe infatti crittografare mediante un numero di bit superiore al numero massimo di qubit usabili in un calcolatore quantistico.
I due algoritmi quantistici, appena ricordati, sorprendono per la loro efficacia e si pone immediatamente la domanda circa l’esistenza di altri algoritmi che possano risolvere altri problemi e sarebbe interessante sapere quante siano le classi di problemi che possono trarre vantaggio dai calcolatori quantistici. Sarebbe anche utile che il compilatore di un linguaggio per calcolatori quantistici potesse identificare questi problemi automaticamente durante l’analisi del programma al fine tradurli direttamente in algoritmi quantistici. I compilatori sono stati in grado di svolgere compiti di questo genere in varie occasioni quando, nel corso del tempo, si sono resi disponibili miglioramenti dell’hardware quali i sistemi vettoriali, quelli paralleli a memoria condivisa e poi a memoria distribuita e molti altri ancora.
Una classe di problemi, in un certo senso, separata è quella della simulazione numerica dei sistemi fisici microscopici reali, per esempio nelle applicazioni della fisica dello stato solido alla scienza dei materiali. In questo caso, il calcolatore quantistico simula i fenomeni microscopici naturali che sono certamente quantistici. Storicamente, è proprio a partire da quest’osservazione di R.P. Feynmann che ha preso le mosse, all’inizio degli anni ottanta, l’avventura dei calcolatori quantistici, certamente prima di incontrare la scienza dell’informazione, che aveva sviluppato indipendentemente molti concetti interessanti e notevolmente correlati come il denaro quantistico , il calcolo invertibile e la crittografia quantistica .
Paolo Santangelo – Fisico
|