Come sarebbe un programma quantistico molto semplice?


76

Alla luce dell'annuncio del primo chip fotonico quantistico programmabile al mondo , mi chiedevo quale sarebbe il software per un computer che utilizza l'entanglement quantistico. Uno dei primi programmi che abbia mai scritto è stato qualcosa di simile

for i = 1 to 10
  print i
next i

Qualcuno può fornire un esempio di codice di semplicità comparabile che utilizzerebbe chip fotonici quantistici (o hardware simile), in pseudocodice o linguaggio di alto livello? Ho difficoltà a fare il salto concettuale dalla programmazione tradizionale all'entanglement, ecc.


il tuo collegamento è interrotto
Suresh Venkat,

1
+1 e per questa domanda. Sono molto curioso di conoscere un linguaggio di programmazione con un paradigma diverso da quello di Turing Machines, per quanto lontano potremmo essere dall'eseguire effettivamente il codice in un computer quantistico.
Janoma,

Risposte:


60

Caveat Emptor: quanto segue è fortemente distorto dalla mia ricerca e vista sul campo del controllo di qualità. Ciò non costituisce il consenso generale del settore e potrebbe anche contenere un po 'di autopromozione.

Il problema di mostrare un "ciao mondo" all'informatica quantistica è che siamo sostanzialmente lontani dai computer quantistici come Leibnitz o Babbage dal tuo attuale computer. Mentre sappiamo come dovrebbero funzionare teoricamente, non esiste un modo standard per costruire effettivamente un computer quantistico fisico. Un effetto collaterale di ciò è che non esiste un singolo modello di programmazione del calcolo quantistico. Libri di testo come Nielsen et al. ti mostrerà un diagramma di "circuito quantistico", ma questi sono ben lontani dai linguaggi di programmazione formale: ottengono un po 'di "agitando la mano" sui dettagli come il controllo classico o gestendo i risultati di input / output / misurazione.

Ciò che mi è più adatto nella mia ricerca come scienziato informatico del linguaggio di programmazione e per far passare il controllo di qualità ad un altro scienziato informatico, è usare il modello di controllo qualità più semplice che ho incontrato che fa tutto.

Il programma di calcolo quantistico più semplice che ho visto che contiene tutti gli elementi essenziali è un piccolo programma di tre istruzioni nel modello di programmazione quantistica più semplice che abbia mai incontrato. Lo uso come faresti con un "mondo di ciao" per chiarire le basi.

Consentitemi di fornire un breve riepilogo semplificato del calcolo delle misure di Danos et al. 1 su cui si basa si basa sul computer quantistico unidirezionale 2 : un qubit viene distrutto quando misurato, ma la misurazione influisce su tutti gli altri qubit che sono stati intrecciati con esso. Ha alcuni vantaggi teorici e pratici rispetto ai computer quantistici "basati su circuiti" come realizzato dal chip fotonico, ma questa è una discussione diversa.

Considera un computer quantistico che ha solo cinque istruzioni: N, E, M, X e Z. Il suo "linguaggio assembly" è simile al tuo normale computer, dopo aver eseguito un'istruzione passa all'istruzione successiva nella sequenza. Ogni istruzione prende un identificatore qubit di destinazione, qui usiamo solo un numero e altri argomenti.

N 2          # create a new quantum bit and identify it as '2'
E 1 2        # entangle qubits '1' and '2', qubit 1 already exists and is considered input
M 1 0        # measure qubit '1' with an angle of zero  (angle can be anything in [0,2pi]
             # qubit '1' is destroyed and the result is either True or False
             # operations beyond this point can be dependent on the signal of '1'
X 2 1        # if the signal of qubit '1' is True, execute the Pauli-X operation on qubit '2'

Il programma di cui sopra crea quindi un ancilla, lo intreccia con l'input qubit, misura l'input e, a seconda del risultato della misurazione, esegue un'operazione sull'ancilla. Il risultato è che qubit 2 ora contiene lo stato di qubit 1 dopo l' operazione Hadamard .

Quanto sopra è naturalmente a un livello così basso che non vorrai codificarlo manualmente. Il vantaggio del calcolo della misurazione è che introduce "schemi", una sorta di macro componibili che ti permettono di comporre algoritmi più grandi come faresti con le subroutine. Si inizia con schemi a 1 istruzione e si sviluppano schemi più grandi da lì.

Invece di una sequenza di istruzioni simile ad un assemblatore, è anche comune scrivere il programma come un grafico:

 input                .........
    \--> ( E ) ---> (M:0)     v
(N) ---> (   ) ------------> (X) ---> output

dove le frecce piene sono dipendenze da qubit e la freccia punteggiata è una dipendenza "segnale".

Il seguente è lo stesso esempio di Hadamard espresso in un piccolo strumento di programmazione che immaginerei che un "programmatore quantistico" userebbe.

Strumento di calcolo delle misurazioni

modifica: (aggiungendo la relazione con i computer "classici") I computer classici sono ancora molto efficienti in ciò che fanno meglio, e quindi la visione è che i computer quantistici verranno utilizzati per scaricare determinati algoritmi, analogamente a come il computer corrente scarica la grafica in un GPU. Come hai visto sopra, la CPU controllerebbe il computer quantistico inviandogli un flusso di istruzioni e rileggere i risultati della misurazione dai "segnali" booleani. In questo modo si ha una stretta separazione del controllo classico da parte della CPU e dello stato quantico e degli effetti sul computer quantistico.

Ad esempio, userò il mio coprocessore quantico per calcolare un booleano casuale o un cointoss. I computer classici sono deterministici, quindi è male nel restituire un buon numero casuale. I computer quantistici sono intrinsecamente probabilistici, tutto quello che devo fare per ottenere uno 0 o 1 casuale è misurare un qubit equamente bilanciato. La comunicazione tra CPU e 'QPU' sarebbe simile a questa:

 qrand()       N 1; M 1 0;
 ==>  | CPU | ------------> | QPU |  ==> { q1 } ,  []
                 start()
      |     | ------------> |     |  ==> { } , [q1: 0]
                 read(q1)         
      |     | ------------> |     |
                  q1: 0 
 0    |     | <-----------  |     |
 <==

Dov'è { ... }la memoria quantistica della QPU contenente qubit ed [...]è la sua memoria classica (segnale) contenente booleani.


  1. Danos et al. Il calcolo della misurazione. arXiv (2007) vol. Quant-ph
  2. Raussendorf e Briegel. Un computer quantistico a senso unico. Physical Review Letters (2001) vol. 86 (22) pagg. 5188-5191

Ottima discussione sull'argomento, grazie, Manzo. A proposito, l'OP parla di "Ho difficoltà a fare il salto concettuale dalla programmazione tradizionale all'entanglement, ecc." Quindi, qualcosa che aiuta in quella transizione dovrebbe essere il benvenuto.
Kris,

Hai ragione, mi è sembrato che in realtà mi sia sfuggita quella parte, per vergogna: / Aggiunta di un paragrafo

"Considera un computer quantistico che ha solo cinque istruzioni: N, E, M, X e Z." nessuna spiegazione dell'istruzione Z :(
Fernando Gonzalez Sanchez

Z è molto simile a X;) en.wikipedia.org/wiki/Pauli_matrices L'operazione X trasforma il vettore [ab] in [ba], l'operazione Z lo trasforma in [a -b].
Manzo

21

Suppongo che il libquantum di C , le monadi quantistiche di Haskell o il Quantum :: Entanglement di Perl rappresentino tutti i calcoli quantistici fedelmente. Potresti guardare i loro esempi.

In generale, descrivi un algoritmo quantistico come un algoritmo classico che applica una serie di operatori lineari a una super-posizione che rappresenta lo stato del tuo sistema quantistico. Gli articoli di giornale spesso descrivono un circuito con linee per bit / registri quantici e scatole per operatori lineari.

Naturalmente, la parte difficile non è descrivere l'algoritmo ma capire perché funziona, proprio come gli algoritmi probabilistici. Ho sempre considerato l'algoritmo di Grover abbastanza comprensibile. Puoi anche leggere la trasformazione di Quantum Fourier usata dall'algoritmo di Shor .


11

Sembra così: inserisci qui la descrizione dell'immagine

Anche tu puoi avere accesso a un vero processore quantico. Vai qui e registrati: http://www.research.ibm.com/quantum/

Include anche un simulatore in modo da poter testare senza utilizzare l'hardware reale o utilizzare crediti (gratuiti) per eseguire su hardware reale.



3

Penso che la risposta sia "Un po 'come un semplice programma classico".

Se consideriamo il calcolo lambda tipicamente semplice (con i prodotti) come il cuore della programmazione classica, allora possiamo sfruttare il fatto che è la teoria dei tipi interna di una categoria cartesiana chiusa, che ci dà un indicatore.

nk

Quindi, se lo STLC è per le categorie chiuse cartesiane, che cosa è per le categorie monoidali simmetriche chiuse? Bene, sappiamo che la logica interna di una categoria monoidale simmetrica è MILL . Quindi ciò di cui abbiamo bisogno è una teoria dei tipi corrispondente a MILL - una teoria dei tipi lineare.

Allontanandosi dall'assurdità astratta, cosa otteniamo con una teoria dei tipi lineare? Linearità. Otteniamo linearità delle risorse. E questo è esattamente ciò che vogliamo. Non è consentito clonare bit quantici. Non ti è consentito misurare implicitamente. E la linearità significa che non è possibile eseguire nessuna di queste operazioni durante la riduzione.

C'è stato qualche lavoro su teorie di tipo lineare, ma non una tonnellata. Ho preso alcune delle idee in questo post da questo articolo: Fisica, Topologia, Logica e Calcolo: una pietra di Rosetta di Mike Stay e John Baez, che va molto più in dettaglio del mio handwaving.


0

Probabilmente andrei con una semplice implementazione del contatore "divide per small n" per cominciare.

Ad esempio: data una sorgente a 10 GHz, genera un'uscita a 5 GHz (ma questi numeri sono arbitrari e intendono solo illustrare il concetto).

Questo ci consente di ignorare questioni come l'archiviazione e l'architettura Von Neumann e ci consente di concentrarci sul fatto che i componenti stiano effettivamente facendo qualcosa di comprensibile.

Il prossimo obiettivo, quindi, sarebbe quello di costruire un piccolo repertorio di "small n" (ma ascolterei anche il respingimento dei miei ricercatori - se pensassero che altri piccoli obiettivi sarebbero più immediatamente fruttuosi, certamente vorrei capire quello che mi stavano dicendo.)

Gli obiettivi a lungo termine includerebbero meccanismi per pompare le informazioni dentro e fuori dal sistema e trattenerle abbastanza a lungo per usarle.

(Probabilmente vale la pena ricordare che i primi programmi per computer erano tutti "cablati". Fu solo dopo una vasta esperienza con quei sistemi che siamo stati in grado di implementare programmi memorizzati.)


-6

Penso che la programmazione di un computer quantistico debba essere vista da un diverso punto di vista rispetto alla normale programmazione orientata agli oggetti.

Il controllo qualità ha la stessa capacità del cervello di pensare e decidere. La capacità di pensare i mezzi ha il potere di estrarre i dati da una fonte di dati che sarebbe la scelta possibile e decidere quale scegliere da tutti gli stati possibili.

Un software a questo punto dovrebbe essere progettato in modo tale che i qubit rappresentino la fonte di dati che possono essere estratti e intrecciati con altri gruppi di dati.

Il controllo qualità dovrebbe avere un minatore di dati che elabori la lettura dei dati, collegando diverse opzioni a gruppi diversi di origine dati che rappresentano informazioni, leggendo tutti gli stati possibili e scegliendo quale continuare.

Ecco come funziona il nostro cervello. Il controllo qualità è in grado di comprendere e agire di conseguenza secondo la legge della Meccanica Quantistica, ciò significa che si dà un problema e il controllo qualità mostra tutte le possibili soluzioni per risolverlo.

è quanto potente potrebbe essere il controllo qualità, sei d'accordo?

https://www.cs.rutgers.edu/~mlittman/papers/openhouse11.pdf questo è il punto di partenza, quindi creare un dataminer per costruire il dispositivo quantistico con gate, ecc., un lettore collegato al dataminer, per leggere e fornire un feedback. i dati host dei componenti quantici di origine dati e l'ambito della conoscenza in cui agisce il dataminer.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.