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.
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.
- Danos et al. Il calcolo della misurazione. arXiv (2007) vol. Quant-ph
- Raussendorf e Briegel. Un computer quantistico a senso unico. Physical Review Letters (2001) vol. 86 (22) pagg. 5188-5191