Questa settimana sono alla Conferenza degli sviluppatori NDC a Sydney. Mentre ero qui, ho partecipato a un workshop sulla programmazione di computer quantistici utilizzando Q#, gestito da John Azariah, il creatore del linguaggio di programmazione Q#.
Q# è un linguaggio Microsoft recentemente rilasciato specificamente sviluppato per la programmazione di operazioni di computer quantistici da un computer classico. È supportato su Mac, Windows e Linux.
Ciò che è così eccitante di Q# è che è un’astrazione del calcolo quantistico a un nuovo livello semantico. Puoi esprimere idee complesse in modo succinto (pensa a C rispetto al linguaggio Assembly). Nuovi livelli di astrazione semantica consentono l’emergere di nuovi paradigmi.
Q# non è semplicemente un nuovo livello di astrazione rispetto a un precedente, familiare, tuttavia. Q# è un’astrazione semantica su un hardware rivoluzionario che viene ancora implementato fisicamente: un computer quantistico.
Puoi esprimere cose in Q# che semplicemente non puoi esprimere in un linguaggio informatico classico.
Q # è davvero più simile a un linguaggio assembly per computer quantistici, in termini di primitive che incapsula. Siamo fondamentalmente con i computer quantistici dove eravamo alla fine degli anni ’40 / primi anni’ 50 con i computer classici.
Q# Modello di programmazione
Il modello di programmazione per Q# è quello di trattare il computer quantistico come un coprocessore. È simile a lavorare con una GPU – l’unità di elaborazione grafica nella scheda video del computer. La GPU è un processore specializzato per scricchiolare poligoni e calcolare l’ombreggiatura. Si scopre che le GPU sono anche buone per il tipo di scricchiolio del numero necessario per il mining di Bitcoin, quindi le persone le usano per questo. Per programmare una GPU, assemblare le istruzioni per la GPU utilizzando un linguaggio specifico del dominio, quindi inviarle dalla CPU principale del computer alla GPU per l’esecuzione.
Con Q# si scrivono le operazioni quantistiche nel linguaggio specifico del dominio Q#, che è un linguaggio funzionale senza stato, e quindi le si invia al computer quantistico da un programma scritto in C# in esecuzione su una CPU classica, che è anche il luogo in cui si riceve l’output finale dal computer quantistico.
Esempio Q# Code
Dopo il workshop, ho scritto un programma Q# che dimostra un semplice comportamento quantistico distinto dal comportamento di un computer classico.
Il programma HGate dimostra un caso speciale del famoso esperimento a doppia fenditura, in cui l’osservazione di uno stato intermedio del sistema influenza il comportamento del sistema.
“Dio non gioca a dadi…” — Albert Einstein
Per capire il comportamento mostrato da questo programma: immagina di prendere una moneta e iniziare a testa in su, poi lanciarla. Ha una probabilità del 50% di arrivare testa o croce. Si controlla di cosa si tratta, poi capovolgere di nuovo. Ha una probabilità del 50% di venire di nuovo testa o croce.
Abbastanza semplice. Ora, ecco la stranezza quantistica. Nel regno quantistico, se la moneta è una particella soggetta a effetti quantistici, la capovolgi inviandola attraverso un circuito logico quantistico chiamato porta di Hadamard. Se lo guardi dopo il primo flip, ottieni 50/50 teste / code su quel flip e sul secondo flip. Tuttavia, se non lo guardi dopo il primo flip, il secondo flip arriva a testa in giù — ogni volta.
Albert Einstein, che per primo scoprì la Meccanica Quantistica, non poteva credere che l’universo potesse funzionare in questo modo. Eppure lo fa, perché altrimenti non avremmo iPhone e altri dispositivi elettronici moderni, che operano a scale estremamente piccole e sfruttano una serie di comportamenti quantistici come questo. Einstein trascorse il resto della sua vita cercando di dimostrare che la stranezza quantistica che scoprì non era una cosa, senza successo. Ed e ‘ per questo che non se ne fa il merito. Ma sì, ha pubblicato tre articoli contemporaneamente – uno era una prova dell’esistenza degli atomi, il secondo era la relatività, e il terzo riguardava la radiazione del corpo nero, che è un fenomeno quantistico meccanico.
Per leggere un po ‘ di più sul perché si verifica questo specifico comportamento quantistico, vedere il README.md file del programma di esempio.
Un’operazione quantistica Q#
Ecco un esempio di un’operazione quantistica scritta in Q#, tratta dal programma di esempio collegato sopra:
operation CoinFlip (count: Int) : (Int, Int)
{
body
{
mutable numOnes = 0;
mutable numZeros = 0; // Get a Qubit in Zero state
using (qubit = Qubit) { for (test in 1..count) {
// Set is an operation defined elsewhere
Set (Zero, qubit); // Send the qubit through a Hadamard quantum logic gate
H(qubit); // Measure the value of the q-bit
let state = M(qubit); if (state == Zero) {
set numZeros = numZeros + 1;
}
if (state == One) {
set numOnes = numOnes + 1;
}
}
ResetAll(qubit); // Reset the qubit
}
return (numZeros, numOnes);
}}
Il design del linguaggio Q#
Q# trae ispirazione da F# come linguaggio funzionale (il compilatore / parser è scritto in F#), C# per la sintassi, e trae alcune idee da Python (in particolare for in
).
È un linguaggio stateless — non c’è modo di mantenere lo stato tra le operazioni quantistiche e la misurazione dello stato per restituire un valore da un’operazione comprime lo stato quantico in un singolo stato del mondo reale. Non ha variabili, ma utilizza l’associazione di immutabili costanti.
I tipi sono basati su tuple, con arità arbitraria. Ha un supporto applicativo parziale non curry e ha generici e funtori. I funtori permettono che le sequenze delle operazioni siano espresse e ragionate sopra.
Il compilatore Q# può eseguire l’analisi dell’intero programma e ragionare sul codice per eseguire le ottimizzazioni prima di inviare le operazioni al computer quantistico. Questo è importante a causa del costo delle operazioni, soprattutto data la piccola fetta di tempo che lo stato di qubit è coerente con i computer quantistici attuali e probabili (a breve termine) futuri.
Quali problemi possono risolvere i computer quantistici?
I computer classici utilizzano bit che possono avere uno dei due stati: uno o zero. I bit dei computer quantistici, o qubit, hanno solo uno di questi due stati quando li guardi, ma all’interno del computer quantistico possono avere stati probabilistici. Con questo, possono modellare molti stati, in particolare le forme d’onda dello stato probabilistico delle particelle. Come fai calcoli utili con questo? Bene, è buono per modellare i sistemi fisici.
Nel 1911, abbiamo capito come fare l’ammoniaca. Richiede il riscaldamento dell’azoto a 5000 gradi e la compressione a 50 atmosfere. Questa ammoniaca viene utilizzata per polvere da sparo e fertilizzanti, e questo fertilizzante ha permesso la rivoluzione verde degli anni ‘ 60 che ci ha permesso di raddoppiare la popolazione umana globale. il 4% del bilancio energetico globale va alla produzione di ammoniaca.
L’nitrogenasi è un enzima contenuto in un batterio che vive in noduli parassiti sulle radici dei fagioli. Quando si coltivano fagioli in un campo, questo enzima fissa l’azoto dall’atmosfera nel terreno, fertilizzando il terreno. Così gli agricoltori ruotano le colture-coltivando grano, poi fagioli, poi grano — per mantenere il terreno fertile.
Per capire come produrre l’ammoniaca come fanno i batteri — a temperatura ambiente usando H2O + N dall’atmosfera — è necessario risolvere l’interazione di 170 elettroni. L’nitrogenasi ha due metalli di transizione che fungono da catalizzatori: ferro e molibdeno. Ciò significa che abbiamo bisogno di 21 numbers numeri complessi per modellare le forme d’onda degli elettroni. Ci sono solo 21 atoms atomi sulla Terra — quindi avresti bisogno di 1.000.000 di Terre solo per memorizzare la definizione del problema.
Un computer quantistico con 200 qubit può modellare molti stati.
Con quel computer possiamo eseguire le simulazioni per capire come farlo come fanno i batteri. Ci sarà ulteriore ingegneria una volta che abbiamo la soluzione per costruire qualcosa che può farlo — proprio come nuovi composti di droga devono essere productised. E una volta fatto ciò, la produzione agricola dell’agricoltura sarà significativamente più alta.
Costruzione di computer quantistici
In un computer quantistico, ci sono due componenti di un qubit: un componente fisico che detiene lo stato quantistico e un componente che esegue operazioni sul componente fisico.
Un qubit — almeno nel modo in cui ci stiamo avvicinando ora — opera a 15 milliKelvin. L’elio liquido è 4 Kelvin.
Il modello di calcolo quantistico è una generalizzazione del calcolo classico. È, matematicamente, algebra lineare. Matematicamente, un qubit è un vettore in uno spazio lineare ad alta dimensione (uno spazio di Hilbert).
Non è possibile osservare il qubit in quello spazio, ma è possibile operare su di esso richiedendo al sistema di applicare le traduzioni rotazionali ad esso.
Gli attuali computer quantistici sono in grado di generare un qubit fisico per 10^-6 secondi. Dopo quel periodo decade, quindi è necessaria la correzione degli errori.
Esistono due modelli di calcolo quantistico:
- L’evoluzione del modello di gate-tempo dello stato quantistico utilizzando la moltiplicazione della matrice. Questo è il modello che Q# utilizza.
- Quantum ricottura-trovare lo stato di energia più basso che risolve un problema. Il computer DWave utilizza questo metodo.
Il calcolo classico è un caso speciale di calcolo quantistico. Quindi gli sviluppi e le scoperte nell’informatica quantistica stanno causando intuizioni nell’informatica classica.
Impatti dell’informatica quantistica
Il manifesto principale figlio del probabile impatto futuro dell’informatica quantistica è in grado di rompere gli attuali schemi di crittografia. Tuttavia, è probabile che ci siano molti più cambiamenti di impatto prima di allora.
Rompere la crittografia moderna richiederà computer quantistici con 5000 qubit.
Microsoft sta già implementando la crittografia resistente al calcolo post-quantistico, inclusa la crittografia basata su reticolo. La crittografia moderna si basa sul factoring di grandi numeri primi-classicamente costosi da risolvere, ma banali per i computer quantistici.
NISQC è “Noisy Intermediate Scale Quantum Computing”. Alcune persone stanno sviluppando computer che hanno un gran numero di qubit rumorosi. MS non sta facendo questo. Stanno lavorando per ottenere il loro primo “qubit topologico” – un qubit resistente alla decoerenza. Sarà più computazionalmente rilevante. Sono sulla buona strada per ottenerlo quest’anno. John spera che nella sua vita vedremo 1000-1,000,000 qubit su un wafer a 15milliKelvin.
Man mano che otteniamo i computer quantistici online, una delle cose che ci aiuteranno a fare è modellare i sistemi fisici che possiamo usare per rendere i computer quantistici più efficienti.
Risolvere problemi come l’nitrogenasi, o come la clorofilla cattura la CO2 dall’atmosfera e la trasforma in carboidrati — invertendo l’effetto serra e permettendoci di creare cibo dal nulla (e dal sole) — sono più vicini all’orizzonte e avranno un impatto enorme — così come l’utilizzo di computer quantistici per sviluppare superconduttori.
E sbloccheranno anche problemi e opportunità che non stiamo nemmeno considerando in questo momento. Einstein non stava pensando all’iPhone o a Internet quando ha pubblicato il suo articolo sulle radiazioni del corpo nero.
Stiamo vivendo nel futuro in questo momento.
Per un paio di grandi libri che introducono la fisica quantistica senza un sacco di matematica, vi consiglio:
“Alla ricerca del gatto di Schrodinger: Fisica quantistica e realtà ” – una storia popolare dello sviluppo della Meccanica Quantistica, tracciando l’evoluzione del pensiero e della scoperta attraverso il 20 ° secolo.
“Il Tessuto della Realtà — La Scienza degli Universi Paralleli, e le sue Implicazioni” — un libro di David Deutsch, un pioniere dell’Informatica Quantistica. Questo libro inizia con la filosofia della scienza (in particolare la sua epistemologia), e continua ad esaminare alcune delle implicazioni filosofiche della meccanica quantistica.
Se si vuole ottenere a destra in esso, controllare “Quantum Computing per gli scienziati informatici”. Questo è il libro che John raccomanda.
C’è arte precedente in questo spazio — per esempio Quipper, che è implementato in Haskell. Tuttavia, Q# è disponibile in un SDK di calcolo quantistico che include un simulatore locale a 3 qubit e l’accesso a un simulatore basato su cloud a 40 qubit. IBM ha OpenQASM-un linguaggio di programmazione quantistica assembly, che ha un editor visivo Scratch-like e una piattaforma di computer quantistico (reale) basata su cloud. Q# è un linguaggio di livello superiore con tipi e flusso di controllo.