In cosa differisce la programmazione di un algoritmo quantistico? Come sarebbe un linguaggio simile a C se fosse progettato per i qubit? I tipi cambieranno?
In cosa differisce la programmazione di un algoritmo quantistico? Come sarebbe un linguaggio simile a C se fosse progettato per i qubit? I tipi cambieranno?
Risposte:
Quando ho esaminato questo aspetto qualche tempo fa, era chiaro che gli algoritmi quantistici, sebbene non particolarmente veloci, permettevano un parallelismo esponenzialmente massiccio. Quindi brilleranno nei casi che coinvolgono la ricerca in spazi che non sono pratici con l'hardware sequenziale, anche con l'hardware sequenziale massicciamente parallelo.
Una proprietà degli algoritmi quantistici è che devono essere reversibili . Ogni dato algoritmo può essere tradotto in uno che è reversibile, aggiungendo ad esso un numero sufficiente di registrazioni per consentirne l'esecuzione all'indietro.
Un'altra proprietà è che ottenere una risposta da un algoritmo quantistico è un affare incostante, perché ciò che ottieni alla fine di un calcolo sono risposte multiple, ognuna con la sua probabilità. Deve essere eseguito in modo tale che la risposta desiderata abbia un'alta probabilità. Ciò può comportare l'esecuzione dell'algoritmo più volte avanti e indietro.
Dai un'occhiata all'algoritmo di ricerca di Grover .
INSERITO per mostrare l'operazione fondamentale dell'algoritmo di Grover. Supponiamo che ci sia un problema di ricerca. Le possibili risposte sono 0, 1, 2 e 3, ma la risposta giusta è 2. Quindi il computer quantistico viene messo in una sovrapposizione di tutti e quattro gli stati e passa attraverso una sequenza di passaggi per vedere quale è corretto, e inverte la sua ampiezza, come i punti neri e le frecce sottostanti:
Puoi vedere che la freccia 2 è stata invertita all'interno della macchina, ma non c'è modo di dirlo all'esterno, perché all'esterno sono visibili solo le probabilità, che sono ampiezze quadrate e quando sono quadrate sono tutte uguali.
Tuttavia, le ampiezze hanno una media, indicata dalla linea rossa, e si può fare in modo che il computer passi attraverso una sequenza di passaggi che inverte ciascuna ampiezza rispetto alla media . Fatto ciò, le ampiezze e le probabilità passano allo stato 2, la risposta giusta ! Quindi, se si osserva la macchina, lo stato 2 si illumina.
Non è così semplice. Generalmente sono necessari più cicli della macchina, avanti e indietro, invertendo alla fine di ogni ciclo, per massimizzare la probabilità della risposta giusta. Inoltre, bisogna fare attenzione a non farlo più di quel numero di volte, perché può altrettanto facilmente invertirsi.
Allora perché dicono che i computer quantistici sono così veloci ? Perché ogni volta che raddoppiate il numero di qubit, quadrate il parallelismo, ma non quadrate la lunghezza del tempo, quindi alla fine vince.
Non è divertente?
Ero personalmente interessato a come questo potesse essere applicato alla verifica della correttezza del software. Ora testiamo il software lanciando un sacco di input di test su di esso e (per essere eccessivamente semplici) vedendo se colpisce un Assert. In un computer quantistico potrebbe essere possibile eseguirlo in parallelo su un set di input molto più denso e vedere se qualcuno di questi casi colpisce un Assert.
Come se l'input dell'algoritmo fosse 128 byte o 1024 bit, ci sono 2 ^ 1024 o 10 ^ 308 possibili ingressi diversi. Non c'è modo di testare molti input su un computer convenzionale, ma un computer quantistico potrebbe provarli tutti in parallelo.
Come sarebbe un linguaggio simile a C se fosse progettato per i qubit? I tipi cambieranno?
Sarebbe così drasticamente diverso da essere incomprensibile come C.
Il problema principale (a quanto ho capito) è che l'informatica quantistica non funziona in un modo imperativo "fai questo, poi quello, poi quest'altra cosa". Cercare di forzare la capacità di C di farlo nel "processore" del computer quantistico sarà se non impossibile, selvaggiamente inefficiente.
Gli algoritmi di programmazione per i computer quantistici (di nuovo, come ho capito io) tendono ad essere più vicini alla mappa / alla riduzione dello stile di programmazione funzionale, poiché il calcolo quantistico consente a tutti i candidati nella parte "riduci" di esistere contemporaneamente e "cadere" dal computer quando osservato.
Si noti che esistono alcuni algoritmi per computer quantistici, anche se i dispositivi non esistono per eseguirli. L'algoritmo di Simon per esempio.
Al fine di rendere il più efficace possibile l'uso di un computer quantistico, è necessario essere in grado di gestire input e output che sono stati di un registro quantistico, per i quali non esiste davvero un analogo classico. Parlando di alcuni anni di esperienza nel campo dell'informazione quantistica, devo avvertirti che nessuno ha davvero una buona intuizione per questo oltre la matematica astratta delle algebre C *, e mi hanno detto che anche questa intuizione risulta essere inadeguata se inizi a pensare alla teoria della relatività.
La classe di problemi risolvibili in modo efficiente su un computer quantistico è nota come BQP, per il polinomio quantico limitato. Questa è la versione quantistica di BPP e puoi trovare maggiori informazioni in questo documento: http://www.scottaaronson.com/papers/bqpph.pdf
Mi è stato detto proprio ieri sera da un ricercatore di algoritmi quantistici che esiste un problema molto importante che è BQP-completo: risolvere un sistema lineare di equazioni N. Classicamente, questo è risolvibile in passaggi O (N) con eliminazione gaussiana. L'algoritmo Harrow-Hassidim-Lloyd ( http://arxiv.org/abs/0811.3171 ) lo risolve in polylog (N), a condizione che tu sia disposto ad accettare una risposta che ha la soluzione codificata come stato quantico. Se si desidera sfruttare appieno un computer quantistico, è quindi necessario disporre di un tipo corrispondente allo stato di un registro quantico.
Anche se sono un po 'al di fuori della mia particolare esperienza in questo momento, rischierei di pensare che si sarebbe in grado di programmare un computer quantistico purché si avesse accesso a un tipo corrispondente agli stati magici. Questo è un concetto difficile, tuttavia, che richiede alcuni studi sull'argomento.
Essere avvertiti che siamo molto a lungo dall'avere un linguaggio di programmazione quantistica, perché siamo in una fase molto primitiva della ricerca sull'informatica quantistica. Chiedere un C quantico in questo momento sarebbe come andare ad Alan Turing e chiedergli di progettare Python. Non abbiamo ancora ottenuto la versione quantistica del tubo a vuoto!