Programming Quantum Computers with Q#

This week I ’ m at the NDC Developer Conference in Sydney. Täällä ollessani osallistuin Q# – kvanttitietokoneiden ohjelmointityöpajaan, jota johti John Azariah, Q# – ohjelmointikielen luoja.

kvanttitietokoneen ohjelmointikielen Q#: n luojan John Azariahin kanssa. Jos näytän väsyneeltä, se johtuu siitä, että olin jopa 3am tänä aamuna kirjoittamassa ensimmäistä kvanttiohjelmaani Q#.

Q# on hiljattain julkaistu Microsoftin kieli, joka on kehitetty erityisesti kvanttitietokoneen toimintojen ohjelmointiin klassisesta tietokoneesta. Sitä tuetaan Macissa, Windowsissa ja Linuxissa.

Q#: ssa kiehtoo se, että se on kvanttilaskennan abstraktio uudella semanttisella tasolla. Voit ilmaista monimutkaisia ideoita ytimekkäästi (ajattele C vs. Assembly-kieltä). Semanttisen abstrahoinnin Uudet tasot mahdollistavat uusien paradigmojen syntymisen.

Q# ei kuitenkaan ole vain uusi abstraktiotaso entisen, tutun päälle. Q# on semanttinen abstraktio vallankumoukselliselle laitteistolle, jota vielä fyysisesti toteutetaan — kvanttitietokoneelle.

Q#: lla voi ilmaista asioita, joita ei yksinkertaisesti voi ilmaista klassisella tietokonekielellä.

Q# on oikeastaan enemmän sukua kvanttitietokoneiden assembly-kielelle, mitä primitiiveihin se kapseloi. Olemme periaatteessa kvanttitietokoneiden kanssa, missä olimme 40-luvun lopulla / 50-luvun alussa klassisten tietokoneiden kanssa.

Q# – ohjelmointimalli

Q# – ohjelmointimalli käsittelee kvanttitietokonetta rinnakkaisprosessorina. Se on samanlainen kuin työskentely GPU-grafiikan käsittely yksikkö tietokoneen näytönohjain. GPU on erikoistunut prosessori polygonien murskaamiseen ja varjostusten laskemiseen. On käynyt ilmi, että GPU ovat myös hyvä sellainen numero crunching tarvitaan Bitcoin louhinta liian, joten ihmiset käyttävät niitä siihen. Ohjelmoida GPU, voit koota ohjeet GPU käyttäen verkkotunnuskohtainen kieli, sitten lähettää ne tietokoneen tärkein CPU GPU suoritettavaksi.

Q#: lla kirjoitetaan kvanttioperaatiot verkkotunnuskohtaisella kielellä Q#, joka on tilaton, funktionaalinen kieli, ja lähetetään ne sitten kvanttitietokoneelle C#: lla kirjoitetusta ohjelmasta, joka pyörii klassisella suorittimella, jolloin myös kvanttitietokoneesta saadaan mahdollinen lähtö.

esimerkki Q# – koodi

työpajan jälkeen kirjoitin Q# – ohjelman, joka osoittaa yksinkertaisen kvanttikäyttäytymisen, joka eroaa klassisen tietokoneen käyttäytymisestä.

HGate-ohjelma osoittaa erikoistapauksen kuuluisasta Kaksoisrakokokeesta, jossa systeemin välitilan havainnointi vaikuttaa systeemin käyttäytymiseen.

”Jumala ei pelaa noppaa…” — Albert Einstein

ymmärtääkseen tämän ohjelman osoittaman käyttäytymisen: kuvitelkaa, että otatte kolikon ja aloitatte Kruuna ylöspäin ja sitten heitätte sitä. Sillä on 50 prosentin mahdollisuus saada kruuna tai klaava. Tarkista, mikä se on, ja käännä uudestaan. Sillä on 50 prosentin mahdollisuus nousta kruuna tai klaava uudelleen.

melko suoraviivaista. Tässä on kvanttihörhöys. Kvanttimaailmassa, jos kolikko on kvanttivaikutusten kohteena oleva hiukkanen, sitä käännetään lähettämällä se kvanttilogiikan piirin Hadamardin portin läpi. Jos katsot sitä ensimmäisen voltin jälkeen, saat 50/50 kruunaa/klaava tuosta voltista ja toisesta voltista. Kuitenkin, jos et katso sitä ensimmäisen voltin jälkeen, toinen voltti tulee Kruuna – joka ikinen kerta.

Albert Einstein, joka ensimmäisenä keksi kvanttimekaniikan, ei voinut uskoa, että maailmankaikkeus voisi toimia näin. Ja silti se vaikuttaa, koska muuten meillä ei olisi iPhoneja ja muuta modernia elektroniikkaa, jotka toimivat äärimmäisen pienillä mittakaavoilla ja hyödyntävät useita tämänkaltaisia kvanttikäyttäytymisiä. Einstein vietti loppuelämänsä yrittäen todistaa, että hänen löytämänsä kvanttihörhöys ei ollut mitään, tuloksetta. Siksi hän ei saa siitä kunniaa. Mutta joo, hän julkaisi kolme tutkielmaa samaan aikaan — yksi oli todiste atomien olemassaolosta, toinen oli suhteellisuusteoria ja kolmas käsitteli mustan kappaleen säteilyä, joka on kvanttimekaaninen ilmiö.

voit lukea hieman lisää siitä, miksi tämä erityinen kvanttikäyttäytyminen tapahtuu, katso README.md esimerkkiohjelman tiedosto.

Q# – Kvanttioperaatio

tässä on esimerkki Q# – kirjaimella kirjoitetusta kvanttioperaatiosta, joka on otettu yllä linkitetystä esimerkkiohjelmasta:

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

Q# – kielen muotoilu

Q# ammentaa innoitusta F#: sta funktionaalisena kielenä (kääntäjä / jäsennin kirjoitetaan F#: lla), C#: sta syntaksissa ja ammentaa joitakin ideoita Pythonista (erityisesti for in).

se on valtioton kieli — kvanttioperaatioiden välillä ei ole mitään keinoa pitää tilaa, ja tilan mittaaminen arvon palauttamiseksi operaatiosta romahduttaa kvanttitilan yhdeksi reaalimaailman tilaksi. Sillä ei ole muuttujia, vaan se käyttää jatkuvien muuttumattomien sitomista.

tyypit ovat Tuple-pohjaisia, mielivaltaisia ariteetteja. Se on ei-curry osittainen sovellus tuki, ja on geneerisiä ja Functors. Toiminnanharjoittajat mahdollistavat toimintojen sekvenssien ilmaisemisen ja perustelemisen.

Q# – kääntäjä voi tehdä kokonaisen ohjelma-analyysin ja perustella koodin yli tekemään optimointeja ennen operaatioiden lähettämistä kvanttitietokoneelle. Tämä on tärkeää operaatioiden kustannusten vuoksi, varsinkin kun otetaan huomioon se pieni siivu ajasta, jonka qubit-tila on johdonmukainen nykyisten ja todennäköisten (lyhyen aikavälin) tulevien kvanttitietokoneiden kanssa.

Mitä Ongelmia Kvanttitietokoneet Voivat Ratkaista?

klassisissa tietokoneissa käytetään bittejä, joissa voi olla yksi kahdesta tilasta — yksi tai nolla. Kvanttitietokoneen bitteillä eli qubiteilla on vain toinen noista kahdesta tilasta, kun niitä katsoo, mutta kvanttitietokoneen sisällä niillä voi olla probabilistisia tiloja. Tämän avulla ne voivat mallintaa monia tiloja-erityisesti hiukkasten probabilistisia tila-aaltomuotoja. Miten teet hyödyllisiä laskelmia tällä? Se sopii fyysisten järjestelmien mallintamiseen.

vuonna 1911 keksittiin, miten ammoniakkia tehdään. Se vaatii typen kuumentamista 5000 asteeseen ja sen puristamista 50 ilmakehään. Tätä ammoniakkia käytetään ruutiin ja lannoitteisiin, ja tämä lannoite mahdollisti 60-luvun vihreän vallankumouksen, jonka ansiosta kaksinkertaistimme maailman ihmispopulaation. Maailman energiabudjetista 4 prosenttia menee ammoniakin tuotantoon.

Nitrogenaasi on entsyymi bakteerissa, joka elää papujen juurissa loisissa kyhmyissä. Kun pellolla kasvatetaan papuja, tämä entsyymi sitoo typpeä ilmakehästä maahan lannoittaen maata. Niinpä maanviljelijät vaihtavat viljelykasveja-ensin vehnää, sitten papuja ja sitten vehnää — pitääkseen maaperän hedelmällisenä.

jotta ymmärrettäisiin, miten ammoniakkia tuotetaan bakteerien tavoin — huoneenlämmössä käyttämällä H2O + N: ää ilmakehästä — tarvitaan 170 elektronin vuorovaikutuksen ratkaisemista. Nitrogenaasissa on kaksi katalyytteinä toimivaa siirtymämetallia: rauta ja molybdeeni. Elektronien aaltomuotojen mallintamiseen tarvitaan siis 21⁷⁰ kompleksilukua. Maapallolla on vain 21⁰⁰ atomeja — joten tarvitsisit 1000000 maapalloa pelkästään ongelman määritelmän tallentamiseen.

kvanttitietokone, jossa on 200 kvittiä, voi mallintaa, että monet valtiot.

tuolla tietokoneella voimme suorittaa simulaatiot ymmärtääksemme, miten se tehdään kuten bakteerit tekevät. Insinööritaitoa tulee lisää, kun meillä on ratkaisu rakentaa jotain, joka voi tehdä sen — aivan kuten uudet lääkeyhdisteet on tuotteistettava. Ja kun se on tehty, maatalouden tuotos on huomattavasti suurempi.

kvanttitietokoneen konstruktio

kvanttitietokoneessa on kaksi komponenttia: jokin fysikaalinen komponentti, jolla on kvanttitila, ja komponentti, joka suorittaa operaatioita fysikaaliselle komponentille.

qubit — ainakin sillä tavalla kuin sitä nyt lähestytään-toimii 15 milliKelvin. Nestemäinen Helium on 4 Kelviniä.

kvanttilaskennan malli on klassisen laskennan yleistys. Se on matemaattisesti Lineaarialgebra. Matemaattisesti qubit on vektori korkeaulotteisessa lineaariavaruudessa (Hilbertin avaruus).

qubitia ei voi tarkkailla kyseisessä tilassa, mutta sitä voi käyttää pyytämällä järjestelmää soveltamaan siihen rotaatiokäännöksiä.

nykyiset kvanttitietokoneet pystyvät tuottamaan fysikaalisen qubitin 10^-6 sekunnin ajan. Sen jälkeen se hajoaa, joten virheenkorjaus on tarpeen.

Kvanttilaskennasta on olemassa kaksi mallia:

  • the gate model-time evolution of quantum state using matrix multiplication. Tätä mallia Q# käyttää.
  • Kvanttihehkutus – löytää alimman energiatilan, joka ratkaisee ongelman. Dwave-tietokone käyttää tätä menetelmää.

Klassinen laskenta on kvanttilaskennan erikoistapaus. Niinpä kvanttilaskennan kehitys ja löydöt aiheuttavat oivalluksia klassisessa laskennassa.

kvanttilaskennan vaikutukset

kvanttilaskennan todennäköisen tulevan vaikutuksen otsikkoesimerkki on se, että pystyy murtamaan nykyiset salausohjelmat. Sitä ennen on kuitenkin todennäköisesti luvassa vielä paljon vaikuttavampia muutoksia.

nykyaikaisen salauksen murtaminen vaatii kvanttitietokoneita, joissa on 5000 qubittia.

Microsoft on jo ottamassa käyttöön kvanttilaskennan jälkeistä kestävää salausta-myös hilapohjaista salausta. Moderni kryptografia perustuu suurten alkulukujen laskemiseen-klassisesti kallis ratkaista,mutta kvanttitietokoneille triviaali.

NISQC on ”Noisy Intermediate Scale Quantum Computing”. Jotkut kehittävät tietokoneita, joissa on paljon meluisia qubitteja. MS ei tee tätä. He pyrkivät saamaan ensimmäisen ”topologisen qubitin” – qubitin, joka on vastustuskykyinen dekoherenssille. Se on laskennallisesti merkityksellisempi. He ovat saamassa sen tänä vuonna. John toivoo,että hänen elinaikanaan näemme 1000-1,000, 000 qubit on kiekko klo 15milliKelvin.

kun saamme kvanttitietokoneet verkkoon, niiden avulla voimme muun muassa mallintaa fysikaalisia järjestelmiä, joiden avulla voimme tehdä tehokkaampia kvanttitietokoneita.

sellaisten ongelmien ratkaiseminen kuin Nitrogenaasi tai se, miten klorofylli vangitsee hiilidioksidia ilmakehästä ja muuttaa sen hiilihydraateiksi-mikä kääntää kasvihuoneilmiön ja antaa meille mahdollisuuden luoda ruokaa tyhjästä ilmasta (ja auringonpaisteesta) — ovat lähempänä horisontissa ja sillä on valtava vaikutus — samoin kuin kvanttitietokoneiden käyttäminen suprajohteiden kehittämiseen.

ja ne avaavat myös ongelmia ja mahdollisuuksia, joita emme edes harkitse juuri nyt. Einstein ei ajatellut iPhonea tai Internetiä, Kun hän julkaisi tutkielmansa mustan kehon säteilystä.

elämme juuri nyt tulevaisuudessa.

parille mahtavalle kirjalle, jotka esittelevät kvanttifysiikkaa ilman paljon matematiikkaa, suosittelen:

”Schrödingerin kissaa etsimässä: Quantum Physics And Reality ” – suosittu historia kehityksen kvanttimekaniikka, jäljittää evoluutio ajattelun ja löytämisen kautta 20th century.

”the Fabric of Reality-The Science of Parallel Universes, and its Implications” – kvanttilaskennan uranuurtajan David Deutschin kirja. Tämä kirja alkaa tieteenfilosofia (erityisesti sen tietoteoria), ja jatkaa tutkia joitakin filosofisia vaikutuksia kvanttimekaniikka.

jos haluat päästä suoraan asiaan, tutustu ”Quantum Computing for Computer Scientists” – artikkeliin. Tätä kirjaa Johannes suosittelee.

tilassa on aikaisempaa taidetta-esimerkiksi Haskellissa toteutettu Quipper. Q# tulee kuitenkin kvanttilaskennan SDK: ssa, joka sisältää 3-qubitin paikallisen simulaattorin ja pääsyn 40-qubitin pilvipohjaiseen simulaattoriin. IBM: llä on openqasm-kvanttikokoonpano-ohjelmointikieli, jossa on Raaputusmainen visuaalinen editori ja pilvipohjainen (todellinen) kvanttitietokonealusta. Q# on korkeamman tason kieli, jolla on tyypit ja ohjausvirta.



+