quantumcomputers programmeren met Q #

deze week ben ik op de NDC Developer Conference in Sydney. Terwijl ik hier was, woonde ik een workshop bij over het programmeren van kwantumcomputers met behulp van Q#, gerund door John Azariah, de maker van de Q# programmeertaal.

met John Azariah, de taal Schepper van Q#, Een quantum computer programmeertaal. Als ik er moe uitzie, is dat omdat ik tot 3 uur vanmorgen mijn eerste kwantumprogramma in Q#schreef.

Q# Is een onlangs vrijgegeven Microsoft taal speciaal ontwikkeld voor het programmeren van kwantum computer operaties van een klassieke computer. Het wordt ondersteund op Mac, Windows en Linux.

wat zo spannend is aan Q# is dat het een abstractie is van kwantum computing op een nieuw semantisch niveau. Je kunt complexe ideeën bondig uitdrukken (denk aan C versus assembler taal). Nieuwe niveaus van semantische abstractie maken de opkomst van nieuwe paradigma ‘ s mogelijk.

Q# is echter niet simpelweg een nieuw niveau van abstractie boven een vroegere, bekende. Q# is een semantische abstractie over een revolutionaire hardware die nog steeds fysiek wordt geïmplementeerd — een quantumcomputer.

u kunt dingen in Q# uitdrukken die u eenvoudigweg niet in een klassieke computertaal kunt uitdrukken.

Q# Is eigenlijk meer verwant aan een assembler voor kwantumcomputers, in termen van de primitieven die het inkapselt. We zijn eigenlijk met kwantumcomputers waar we in de late jaren 40 / vroege jaren 50 waren met klassieke computers.

Q # programmeermodel

het programmeermodel voor Q# is om de quantumcomputer te behandelen als een coprocessor. Het is vergelijkbaar met het werken met een GPU – de grafische verwerkingseenheid in de videokaart van uw computer. De GPU is een gespecialiseerde processor voor het kraken van polygonen en het berekenen van schaduw. Het blijkt dat GPU ‘ s zijn ook goed voor het soort nummer kraken nodig voor Bitcoin mijnbouw ook, dus mensen gebruiken ze voor dat. Om een GPU te programmeren, assembleer je de instructies voor de GPU met behulp van een domeinspecifieke taal, en stuur je ze vervolgens van de belangrijkste CPU van de computer naar de GPU voor uitvoering.

met Q# schrijf je de kwantumbewerkingen in de domeinspecifieke taal Q#, die een staatloze, functionele taal is, en stuur je ze vervolgens naar de quantumcomputer vanuit een programma geschreven in C# dat draait op een klassieke CPU, waar je ook de uiteindelijke output van de quantumcomputer ontvangt.

voorbeeld Q # Code

na de workshop schreef ik een Q# programma dat een eenvoudig kwantumgedrag demonstreert dat verschilt van het gedrag van een klassieke computer.

het hgate-programma toont een speciaal geval aan van het beroemde Dubbelspleetexperiment, waarbij observatie van een tussentoestand van het systeem het gedrag van het systeem beïnvloedt.

“God dobbelt niet …” – Albert Einstein

om het gedrag van dit programma te begrijpen: stel je voor dat je een munt pakt en met heads up begint, en het dan omdraait. Het heeft 50% kans op kop of munt. Je controleert wat het is en draait het dan weer om. Het heeft een 50% kans om weer kop of munt te krijgen.

vrij eenvoudig. Nu, hier is de kwantum vreemdheid. In het kwantumrijk, als de munt een deeltje is dat onderhevig is aan kwantumeffecten, draai je het om door het door een kwantumlogicakring te sturen, een Hadamard gate genaamd. Als je ernaar kijkt na de eerste flip, krijg je een 50/50 kop/munt op die flip en op de tweede flip. Echter, als je niet kijken naar het na de eerste flip, de tweede flip komt hoofden – elke keer.Albert Einstein, die voor het eerst de kwantummechanica ontdekte, kon niet geloven dat het universum zo kon werken. En toch wel, want anders zouden we geen iPhones en andere moderne elektronica hebben, die op extreem kleine schaal opereren en een aantal kwantumgedragingen als dit exploiteren. Einstein probeerde de rest van zijn leven te bewijzen dat de kwantumwraliteit die hij ontdekte geen ding was, zonder succes. En daarom krijgt hij er niet de eer voor. Maar ja, Hij publiceerde drie artikelen tegelijkertijd-een was een bewijs van het bestaan van atomen, de tweede was relativiteit, en de derde ging over zwarte lichaams straling, wat een kwantummechanisch fenomeen is.

om wat meer te lezen over waarom dit specifieke kwantumgedrag gebeurt, zie de README.md bestand van het voorbeeldprogramma.

een Q # Kwantumoperatie

hier is een voorbeeld van een kwantumoperatie geschreven in Q#, overgenomen uit het voorbeeldprogramma dat hierboven is gekoppeld:

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

het Q # Language Design

Q# put inspiratie uit F# als een functionele taal( de compiler / parser is geschreven in F#), C# voor syntaxis, en trekt enkele ideeën uit Python (met name for in).

het is een staatloze taal — Er is geen manier om de toestand vast te houden tussen kwantumoperaties, en de meting van de toestand om een waarde van een operatie te retourneren stort de kwantumtoestand in tot een enkele reële toestand. Het heeft geen variabelen, maar maakt gebruik van de binding van constante onveranderlijke.

Types zijn tupel gebaseerd, met willekeurige ariteit. Het heeft niet-curry gedeeltelijke applicatie ondersteuning, en heeft Generica en Functors. Functors laten sequenties van operaties worden uitgedrukt en beredeneerd over.

de Q# – compiler kan het hele programma analyseren en over de code redeneren om optimalisaties uit te voeren voordat de bewerkingen naar de quantumcomputer worden verzonden. Dit is belangrijk vanwege de kosten van operaties, vooral gezien het kleine deel van de tijd dat qubit staat coherent is met de huidige en waarschijnlijke (korte termijn) toekomstige kwantumcomputers.

Welke Problemen Kunnen Kwantumcomputers Oplossen?

klassieke computers gebruiken bits die één van de twee toestanden kunnen hebben-één of nul. Quantumcomputer-bits, of qubits, hebben slechts één van die twee toestanden als je ernaar kijkt, maar in de quantumcomputer kunnen ze probabilistische toestanden hebben. Hiermee kunnen ze vele toestanden modelleren-vooral de probabilistische toestandsgolfvormen van deeltjes. Hoe doe je hier nuttige berekeningen mee? Het is goed voor het modelleren van fysieke systemen.In 1911 ontdekten we hoe we ammoniak konden maken. Het vereist verwarming stikstof tot 5000 graden en comprimeren tot 50 atmosferen. Deze ammoniak wordt gebruikt voor buskruit en kunstmest, en deze kunstmest maakte De Groene Revolutie van de jaren 60 mogelijk die ons in staat stelde de wereldwijde menselijke bevolking te verdubbelen. 4% van het mondiale energiebudget gaat naar de productie van ammoniak.

Nitrogenase is een enzym in een bacterie die leeft in parasitaire knobbeltjes op de wortels van bonen. Als je bonen kweekt in een veld, fixeert dit enzym stikstof uit de atmosfeer in de grond en bemesten de grond. Dus boeren draaien gewassen-het kweken van tarwe, dan bonen, dan tarwe-om de bodem vruchtbaar te houden.

om te begrijpen hoe ammoniak kan worden geproduceerd zoals de bacteriën dat doen — bij kamertemperatuur met behulp van H2o + N uit de atmosfeer-moet de interactie van 170 elektronen worden opgelost. Nitrogenase heeft twee overgangsmetalen die als katalysatoren fungeren: ijzer en molybdeen. Dat betekent dat we 21⁷⁰ complexe getallen nodig hebben om de golfvormen van de elektronen te modelleren. Er zijn maar 21⁵⁰ atomen op aarde — dus je zou 1.000.000 aarden nodig hebben om de probleemdefinitie op te slaan.

een kwantumcomputer met 200 qubits kan zoveel toestanden modelleren.

met die computer kunnen we de simulaties uitvoeren om te begrijpen hoe het te doen zoals de bacteriën dat doen. Er zal extra engineering komen zodra we de oplossing hebben om iets te bouwen dat het kan-net zoals nieuwe geneesmiddelen moeten worden geproduceerd. En als dat eenmaal gebeurd is, zal de landbouwproductie van de landbouw aanzienlijk hoger zijn.In een quantumcomputer zijn er twee componenten aan een qubit — een of andere fysieke component die de kwantumtoestand bevat, en een component die bewerkingen uitvoert op de fysieke component.

een qubit — althans de manier waarop we het nu benaderen-werkt op 15 milliKelvin. Vloeibaar Helium is 4 Kelvin.

het model van kwantum computing is een veralgemening van klassieke computing. Het is, wiskundig gezien, lineaire algebra. Wiskundig gezien is een qubit een vector in een hoogdimensionale lineaire ruimte (een Hilbertruimte).

u kunt de qubit in die ruimte niet waarnemen, maar u kunt er wel op werken door het systeem te vragen om er rotatievertalingen op toe te passen.

huidige kwantumcomputers kunnen gedurende 10^-6 seconden een fysieke qubit genereren. Na die periode vervalt het, dus foutcorrectie is nodig.

er zijn twee modellen van kwantumcomputing:

  • het poortmodel – tijdsevolutie van kwantumtoestand met behulp van matrixvermenigvuldiging. Dit is het model dat Q# gebruikt.
  • Kwantumgloeiing-het vinden van de laagste energietoestand die een probleem oplost. De DWave computer gebruikt deze methode.

Klassiek computergebruik is een speciaal geval van kwantumcomputing. Ontwikkelingen en ontdekkingen in kwantum computing veroorzaken inzichten in klassieke computing.

Quantum Computing Impacts

het headline poster kind van de waarschijnlijke toekomstige impact van Quantum Computing is in staat om de huidige encryptie schema ‘ s te breken. Echter, er zijn waarschijnlijk veel meer impactvolle veranderingen voor die tijd.Voor het breken van moderne cryptografie zijn quantumcomputers met 5000 qubits nodig.

Microsoft is al bezig met de uitrol van post-quantumcomputingbestendige encryptie-met inbegrip van cryptografie op basis van roosters. Moderne cryptografie is gebaseerd op factoring van grote priemgetallen — klassiek duur om op te lossen, maar triviaal voor kwantumcomputers.

NISQC is “Noisy Intermediate Scale Quantum Computing”. Sommige mensen ontwikkelen computers met grote aantallen lawaaierige qubits. MS doet dit niet. Ze werken aan het verkrijgen van hun eerste “topologische qubit” — een qubit die resistent is tegen decoherentie. Het zal berekenender relevant zijn. Ze zijn op schema om het dit jaar te krijgen. John hoopt dat we in zijn leven 1000-1. 000. 000 qubits zullen zien op een wafer bij 15milliKelvin.Naarmate we kwantumcomputers online krijgen, zullen ze ons helpen fysieke systemen te modelleren die we kunnen gebruiken om efficiëntere kwantumcomputers te maken.Het oplossen van problemen zoals Nitrogenase, of hoe chlorofyl CO2 uit de atmosfeer vangt en het omzet in koolhydraten — het omkeren van het broeikaseffect en het mogelijk maken van voedsel uit dunne lucht (en zonneschijn) — staan dichter aan de horizon en zullen een enorme impact hebben — net als het gebruik van kwantumcomputers om supergeleiders te ontwikkelen.

en ze zullen ook problemen en kansen ontsluiten die we nu niet eens overwegen. Einstein dacht niet aan de iPhone of het Internet toen hij zijn artikel publiceerde over black body radiation.

we leven nu in de toekomst.

voor een paar grote boeken die kwantumfysica introduceren zonder veel wiskunde, adviseer ik:

“op zoek naar Schrodingers kat: Quantum Physics And Reality ” – een populaire geschiedenis van de ontwikkeling van de kwantummechanica, het traceren van de evolutie van het denken en de ontdekking door de 20e eeuw.

“The Fabric of Reality-The Science of Parallel universa, and its Implications” – een boek van David Deutsch, een pionier van Kwantum Computing. Dit boek begint met de filosofie van de wetenschap (in het bijzonder de epistemologie), en gaat verder met het onderzoeken van enkele van de filosofische implicaties van de kwantummechanica.

als u er direct in wilt gaan, kijk dan op “Quantum Computing for Computer Scientists”. Dit is het boek dat John aanbeveelt.

er is prior art in deze ruimte — bijvoorbeeld Quipper, die wordt uitgevoerd in Haskell. Echter, Q# wordt geleverd in een Quantum Computing SDK die een 3-qubit lokale simulator en toegang tot een 40-qubit cloud-gebaseerde simulator bevat. IBM heeft OpenQASM-een quantum assembly programmeertaal, die een Scratch-achtige visuele editor en een cloud-based (real) quantum computer platform heeft. Q# is een hogere taal met types en control flow.



+