Programarea calculatoarelor cuantice cu Q#

săptămâna aceasta sunt la Conferința pentru dezvoltatori NDC din Sydney. În timp ce eram aici, am participat la un atelier de programare a computerelor cuantice folosind Q#, condus de John Azariah, creatorul limbajului de programare Q#.

cu John Azariah, creatorul limbajului Q#, un limbaj cuantic de programare a computerului. Dacă arăt obosit, este pentru că am fost până la 3 dimineața în această dimineață scriind primul meu program cuantic în Q#.

Q # este un limbaj Microsoft lansat recent dezvoltat special pentru programarea operațiunilor cuantice ale computerului de pe un computer clasic. Este acceptat pe Mac, Windows și Linux.

ceea ce este atât de interesant la Q# este că este o abstractizare a calculului cuantic la un nou nivel semantic. Puteți exprima idei complexe succint (gândiți-vă la C versus limbajul de asamblare). Noi niveluri de abstractizare semantică permit apariția unor noi paradigme.

Q # nu este pur și simplu un nou nivel de abstractizare față de unul anterior, familiar. Q # este o abstracție semantică asupra unui hardware revoluționar care este încă implementat fizic-un computer cuantic.

puteți exprima lucruri În Q# pe care pur și simplu nu le puteți exprima într-un limbaj clasic al computerului.

Q# este într-adevăr mai asemănător cu un limbaj de asamblare pentru computerele cuantice, în ceea ce privește primitivele pe care le încapsulează. Suntem practic cu calculatoare cuantice unde am fost la sfârșitul anilor ’40 / începutul anilor’ 50 cu calculatoare clasice.

Q# model de programare

modelul de programare pentru Q# este de a trata computerul cuantic ca un coprocesor. Este similar cu lucrul cu un GPU-unitatea de procesare grafică din placa video a computerului. GPU este un procesor specializat pentru ronțăit poligoane și calcularea umbrire. Se pare că GPU-urile sunt, de asemenea, bune pentru tipul de ronțăit de numere necesare și pentru mineritul Bitcoin, așa că oamenii le folosesc pentru asta. Pentru a programa un GPU, asamblați instrucțiunile pentru GPU folosind un limbaj specific domeniului, apoi le trimiteți de la procesorul principal al computerului la GPU pentru execuție.

cu Q# scrieți operațiile cuantice în limbajul specific domeniului Q#, care este un limbaj apatrid, funcțional, și apoi le trimiteți la computerul cuantic dintr-un program scris în C# care rulează pe un procesor clasic, care este, de asemenea, locul în care primiți ieșirea eventuală de la computerul cuantic.

exemplu Q# Cod

după atelier, am scris un program Q# care demonstrează un comportament cuantic simplu care este distinct de comportamentul unui computer clasic.

programul HGate demonstrează un caz special al celebrului Experiment cu două fante, în care observarea unei stări intermediare a sistemului influențează comportamentul sistemului.

„Dumnezeu nu joacă zaruri…” — Albert Einstein

pentru a înțelege comportamentul afișat de acest program: imaginați-vă luând o monedă și începând cu heads-up, apoi flipping-l. Are o șansă de 50% de a veni cap sau Pajură. Verificați ce este, apoi întoarceți-l din nou. Are o șansă de 50% de a veni din nou cap sau Pajură.

destul de drept înainte. Acum, aici este ciudățenia cuantică. În tărâmul cuantic, dacă moneda este o particulă supusă efectelor cuantice, o răsturnați trimițând-o printr-un circuit logic cuantic numit Poarta Hadamard. Dacă te uiți la ea după primul flip, veți obține un 50/50 capete / cozi pe care flip și pe al doilea flip. Cu toate acestea, dacă nu te uiți la el după primul flip, al doilea flip apare cap — de fiecare dată.

Albert Einstein, care a descoperit pentru prima dată mecanica cuantică, nu-i venea să creadă că universul ar putea funcționa așa. Și totuși o face, pentru că altfel nu am avea iPhone-uri și alte electronice moderne, care funcționează la scări extrem de mici și exploatează o serie de comportamente cuantice ca acesta. Einstein și-a petrecut restul vieții încercând să demonstreze că ciudățenia cuantică pe care a descoperit-o nu a fost un lucru, fără succes. Și de aceea nu primește creditul pentru asta. Dar da, a publicat trei lucrări în același timp — una a fost o dovadă a existenței atomilor, a doua a fost relativitatea, iar a treia a fost despre radiația corpului negru, care este un fenomen mecanic cuantic.

pentru a citi un pic mai mult despre motivul pentru care se întâmplă acest comportament cuantic specific, a se vedea README.md fișierul programului exemplu.

o operație cuantică Q #

Iată un exemplu de operație cuantică scris în Q#, preluat din exemplul programului legat mai sus:

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);
}}

designul limbajului Q#

Q# se inspiră din F# ca limbaj funcțional (compilatorul / parserul este scris în F#), C# pentru sintaxă și atrage câteva idei din Python (în special for in).

este un limbaj apatrid — nu există nicio modalitate de a menține starea între operațiile cuantice, iar măsurarea stării pentru a returna o valoare dintr-o operație prăbușește starea cuantică într-o singură stare din lumea reală. Nu are variabile, dar folosește legarea imutabilelor constante.

tipurile sunt bazate pe Tuple, cu aritate arbitrară. Are suport parțial pentru aplicații non-curry și are generice și functori. Functorii permit exprimarea și motivarea secvențelor de operații.

compilatorul Q# poate face analiza întregului program și poate raționa codul pentru a face optimizări înainte de a trimite operațiile către computerul cuantic. Acest lucru este important din cauza costului operațiunilor, în special având în vedere micul interval de timp în care starea qubit este coerentă cu computerele cuantice actuale și probabile (pe termen scurt) viitoare.

Ce Probleme Pot Rezolva Computerele Cuantice?

computerele clasice folosesc biți care pot avea una din cele două stări — una sau zero. Biți de computer cuantic, sau qubiți, au doar una dintre aceste două stări atunci când te uiți la ele, dar în interiorul computerului cuantic pot avea stări probabilistice. Cu aceasta, ele pot modela multe stări — în special formele de undă probabilistice ale particulelor. Cum faci calcule utile cu asta? Ei bine, este bun pentru modelarea sistemelor fizice.

în 1911, ne-am dat seama cum să facem amoniac. Necesită încălzirea azotului la 5000 de grade și comprimarea acestuia la 50 de atmosfere. Acest amoniac este folosit pentru praf de pușcă și îngrășământ, iar acest îngrășământ a permis Revoluția Verde din anii 60 care ne-a permis să dublăm populația umană globală. 4% din bugetul global de energie merge la producția de amoniac.

Azotaza este o enzimă dintr-o bacterie care trăiește în noduli paraziți de pe rădăcinile fasolei. Când cultivați fasole într-un câmp, această enzimă fixează azotul din atmosferă în sol, fertilizând solul. Deci, fermierii rotesc culturile — grâu în creștere, apoi fasole, apoi grâu — pentru a menține solul fertil.

pentru a înțelege cum să producă amoniacul așa cum o face bacteriile — la temperatura camerei folosind H2O + N din atmosferă — necesită rezolvarea interacțiunii a 170 de electroni. Azotaza are două metale de tranziție care acționează ca catalizatori: fier și molibden. Asta înseamnă că avem nevoie de numere complexe de 21 de ani pentru a modela formele de undă ale electronilor. Există doar 21 de atomi de pe pământ-deci ai avea nevoie de 1.000.000 de pământuri doar pentru a stoca definiția problemei.

un computer cuantic cu 200 de qubiți poate modela multe stări.

cu acel computer putem rula simulările pentru a înțelege cum să o facem ca bacteriile. Va exista o inginerie suplimentară odată ce vom avea soluția de a construi ceva care poate face acest lucru — la fel cum trebuie produși noi compuși de droguri. Și odată ce se va face acest lucru, producția agricolă a agriculturii va fi semnificativ mai mare.

construcția cuantică a computerului

într — un computer cuantic, există două componente ale unui qubit-o componentă fizică care deține starea cuantică și o componentă care efectuează operații asupra componentei fizice.

un qubit — cel puțin așa cum ne apropiem acum — funcționează la 15 milliKelvin. Heliul lichid este de 4 Kelvin.

modelul calculului cuantic este o generalizare a calculului clasic. Este, matematic, algebra liniară. Matematic, un qubit este un vector într-un spațiu liniar de înaltă Dimensiune (un spațiu Hilbert).

nu puteți observa qubitul în acel spațiu, dar îl puteți opera solicitând sistemului să-i aplice traduceri de rotație.

computerele cuantice actuale sunt capabile să genereze un qubit fizic timp de 10^-6 secunde. După această perioadă se descompune, deci este necesară corectarea erorilor.

există două modele de calcul cuantic:

  • modelul porții-evoluția în timp a stării cuantice folosind multiplicarea matricei. Acesta este modelul pe care Q# îl folosește.
  • recoacere cuantică — găsirea celei mai scăzute stări de energie care rezolvă o problemă. Calculatorul DWave utilizează această metodă.

calculul clasic este un caz special de calcul cuantic. Deci, evoluțiile și descoperirile din calculul cuantic provoacă perspective în calculul clasic.

impactul calculului cuantic

copilul posterului principal al impactului viitor probabil al calculului cuantic este capabil să spargă schemele actuale de criptare. Cu toate acestea, este posibil să existe mult mai multe schimbări de impact înainte de atunci.

spargerea criptografiei moderne va necesita computere cuantice cu 5000 de qubiți.

Microsoft lansează deja criptarea rezistentă la calcul post-cuantic-inclusiv criptografia bazată pe zăbrele. Criptografia modernă se bazează pe factorizarea numerelor prime mari — clasic costisitoare de rezolvat, dar banală pentru computerele cuantice.

NISQC este „calculul cuantic la scară intermediară zgomotoasă”. Unii oameni dezvoltă computere care au un număr mare de qubiți zgomotoși. MS nu face acest lucru. Ei lucrează la obținerea primului lor „qubit topologic” – un qubit care este rezistent la decoerență. Va fi mai relevant din punct de vedere computațional. Sunt pe cale să o obțină anul acesta. John speră că în timpul vieții sale vom vedea 1000-1.000. 000 de qubiți pe o placă la 15milliKelvin.

pe măsură ce conectăm computerele cuantice online, unul dintre lucrurile pe care ne vor ajuta să le facem este să modelăm sistemele fizice pe care le putem folosi pentru a face computere cuantice mai eficiente.

rezolvarea problemelor precum Azotaza sau modul în care clorofila captează CO2 din atmosferă și îl transformă în carbohidrați — inversând efectul de seră și permițându — ne să creăm alimente din aer subțire (și soare) — sunt mai aproape la orizont și vor avea un impact imens-la fel ca utilizarea computerelor cuantice pentru a dezvolta supraconductori.

și vor debloca, de asemenea, probleme și oportunități pe care nici măcar nu le luăm în considerare acum. Einstein nu se gândea la iPhone sau la Internet când și-a publicat lucrarea despre radiațiile corpului negru.

trăim în viitor chiar acum.

pentru câteva cărți grozave care introduc fizica cuantică fără multă matematică, recomand:

„în căutarea pisicii lui Schrodinger: Fizica cuantică și realitate ” — o istorie populară a dezvoltării mecanicii cuantice, urmărirea evoluția gândirii și descoperire prin secolul 20.

„țesătura realității — știința universurilor paralele și implicațiile sale” — o carte a lui David Deutsch, un pionier al calculului cuantic. Această carte începe cu filosofia științei (în special Epistemologia sa) și continuă să examineze unele dintre implicațiile filosofice ale mecanicii cuantice.

dacă doriți să intrați direct în ea, consultați „calculul cuantic pentru Informaticieni”. Aceasta este cartea pe care o recomandă Ioan.

există o etapă anterioară în acest spațiu — de exemplu Quipper, care este implementat în Haskell. Cu toate acestea, Q# vine într-un SDK de calcul cuantic care include un simulator local de 3 qubit și acces la un simulator bazat pe cloud de 40 qubit. IBM are OpenQASM-un limbaj de programare quantum assembly, care are un editor vizual asemănător zgârieturilor și o platformă cuantică bazată pe cloud (reală). Q # este un limbaj de nivel superior cu tipuri și flux de control.



+