Programmering af kvantecomputere med#

denne uge er jeg på NDC Developer Conference i Sydney. Mens jeg var her, deltog jeg i et værksted om programmering af kvantecomputere ved hjælp af K#, drevet af John Asariah, skaberen af programmeringssproget K#.

med John Asariah, sprog skaberen af K#, en kvantecomputer programmeringssprog. Hvis jeg ser træt ud, er det fordi jeg var op til 3 am I morges og skrev mit første kvanteprogram i spørgsmål#.

er et nyligt udgivet Microsoft-sprog, der er specielt udviklet til programmering af kvantecomputeroperationer fra en klassisk computer. Det er understøttet på Mac, vinduer og .

det, der er så spændende ved spørgsmål#, er, at det er en abstraktion af kvanteberegning på et nyt semantisk niveau. Du kan udtrykke komplekse ideer kortfattet (tænk på C versus Assembly sprog). Nye niveauer af semantisk abstraktion giver mulighed for fremkomsten af nye paradigmer.

spørgsmål# er imidlertid ikke blot et nyt abstraktionsniveau i forhold til et tidligere, velkendt. SP# er en semantisk abstraktion over et revolutionerende udstyr, der stadig implementeres fysisk — en kvantecomputer.

du kan udtrykke ting i#, som du simpelthen ikke kan udtrykke på et klassisk computersprog.

spørgsmål# er virkelig mere beslægtet med et samlingssprog for kvantecomputere, hvad angår de primitiver, det indkapsler. Vi er dybest set med kvantecomputere, hvor vi var i slutningen af 40 ‘erne / begyndelsen af 50’ erne med klassiske computere.

programmeringsmodel

programmeringsmodellen for kvantecomputeren er at behandle kvantecomputeren som en coprocessor. Det svarer til at arbejde med en GPU — grafikbehandlingsenheden på din computers grafikkort. GPU ‘ en er en specialiseret processor til at knuse polygoner og beregne skygge. Det viser sig, at GPU ‘ er også er gode til den slags talknusning, der er nødvendig for Bitcoin-minedrift, så folk bruger dem til det. For at programmere en GPU samler du instruktionerne til GPU ‘en ved hjælp af et domænespecifikt sprog og sender dem derefter fra computerens hoved-CPU til GPU’ en til udførelse.

med K# skriver du kvanteoperationerne i det domænespecifikke sprog K#, som er et statsløst, funktionelt sprog, og sender dem derefter til kvantecomputeren fra et program skrevet i C#, der kører på en klassisk CPU, hvilket også er hvor du modtager den endelige output fra kvantecomputeren.

eksempel K# kode

efter værkstedet skrev jeg et K# – program, der demonstrerer en simpel kvanteadfærd, der adskiller sig fra en klassisk computers opførsel.

HGate-programmet demonstrerer et specielt tilfælde af det berømte dobbeltspalte-eksperiment, hvor observation af en mellemliggende tilstand af systemet påvirker systemets opførsel.

“Gud spiller ikke terninger…” — Albert Einstein

for at forstå den adfærd, der vises af dette program: forestil dig at tage en mønt og starte med heads up og derefter vende den. Det har en 50% chance for at komme op plat eller krone. Du tjekker, hvad det er, så vend det igen. Det har en 50% chance for at komme op plat eller krone igen.

temmelig ligetil. Nu, her er kvante underlighed. I kvanteområdet, hvis mønten er en partikel, der er genstand for kvanteeffekter, vender du den ved at sende den gennem et kvantelogisk kredsløb kaldet en Hadamard gate. Hvis du ser på det efter den første flip, får du en 50/50 hoveder/haler på den flip og på den anden flip. Imidlertid, hvis du ikke ser på det efter den første flip, den anden flip kommer op hoveder — hver eneste gang.

Albert Einstein, der først opdagede kvantemekanik, kunne ikke tro, at universet kunne fungere sådan. Og alligevel gør det, for ellers ville vi ikke have iPhones og anden moderne elektronik, der opererer i ekstremt små skalaer og udnytter en række kvanteadfærd som denne. Einstein tilbragte resten af sit liv med at forsøge at bevise, at den kvante underlighed, han opdagede, ikke var noget, uden held. Og det er derfor, han ikke får æren for det. Men ja, han offentliggjorde tre papirer på samme tid-den ene var et bevis på eksistensen af atomer, den anden var relativitet, og den tredje handlede om sort kropsstråling, som er et kvantemekanisk fænomen.

for at læse lidt mere om, hvorfor denne specifikke kvanteopførsel sker, se README.md fil af eksempelprogrammet.

en kvante-operation

her er et eksempel på en kvante-operation skrevet i Kvante#, taget fra det eksempelprogram, der er linket ovenfor:

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

Sprogdesignet

spørgsmål# trækker på inspiration fra F# som et funktionelt sprog (kompilatoren / parseren er skrevet i F#), C# til syntaks og trækker nogle ideer fra Python (især for in).

det er et statsløst sprog — der er ingen måde at holde tilstand mellem kvanteoperationer, og måling af tilstand for at returnere en værdi fra en operation kollapser kvantetilstanden til en enkelt virkelighedstilstand. Det har ingen variabler, men bruger binding af konstante uforanderlige.

typerne er tupelbaserede med vilkårlig aritet. Det har ikke-curry delvis ansøgning støtte, og har generiske og Functors. Funktioner tillader sekvenser af operationer, der skal udtrykkes og begrundes over.

kompilatoren kan udføre hele programanalyse og begrunde koden for at udføre optimeringer, før operationerne sendes til kvantecomputeren. Dette er vigtigt på grund af omkostningerne ved operationer, især i betragtning af det lille stykke tid, som kvbit-tilstanden er sammenhængende med nuværende og sandsynlige (kortsigtede) fremtidige kvantecomputere.

Hvilke Problemer Kan Kvantecomputere Løse?

klassiske computere bruger bits, der kan have en af to tilstande — en eller nul. Kvantecomputer bits, eller kvbits, har kun en af disse to tilstande, når man ser på dem, men inde i kvantecomputeren kan de have probabilistiske tilstande. Med dette kan de modellere mange stater — især de probabilistiske tilstandsbølgeformer af partikler. Hvordan gør du nyttige beregninger med dette? Godt, det er godt for modellering fysiske systemer.

i 1911 regnede vi ud, hvordan man laver ammoniak. Det kræver opvarmning af Nitrogen til 5000 grader og komprimering til 50 atmosfærer. Denne ammoniak bruges til krudt og gødning, og denne gødning tillod den grønne Revolution i 60 ‘ erne, der gjorde det muligt for os at fordoble den globale menneskelige befolkning. 4% af det globale energibudget går til produktion af ammoniak.

Nitrogenase er en bakterie, der lever i parasitære knuder på rødderne af bønner. Når du dyrker bønner i en mark, fikserer dette kvælstof fra atmosfæren i jorden og befrugter jorden. Så landmænd roterer afgrøder-voksende hvede, derefter bønner, derefter hvede — for at holde jorden frugtbar.

for at forstå, hvordan man producerer ammoniak, som bakterierne gør — ved stuetemperatur ved hjælp af H2O + N fra atmosfæren — kræver løsning af interaktionen mellem 170 elektroner. Nitrogenase har to overgangsmetaller, der fungerer som katalysatorer: jern og molybdæn. Det betyder, at vi har brug for 21-fas⁰ komplekse tal for at modellere elektronernes bølgeformer. Der er kun 21 — atomer på jorden-så du har brug for 1.000.000 jordarter bare for at gemme problemdefinitionen.

en kvantecomputer med 200 kvbits kan modellere, at mange stater.

med den computer kan vi køre simuleringerne for at forstå, hvordan man gør det som bakterierne gør. Der vil være yderligere teknik, når vi har løsningen til at bygge noget, der kan gøre det — ligesom nye lægemiddelforbindelser skal produceres. Og når det er gjort, vil landbrugsproduktionen fra landbruget være betydeligt højere.

Kvantecomputerkonstruktion

i en kvantecomputer er der to komponenter til en kvbit — en fysisk komponent, der holder kvantetilstanden, og en komponent, der udfører operationer på den fysiske komponent.

en kvbit — i det mindste den måde, vi nærmer os det nu — opererer på 15 milliKelvin. Flydende Helium er 4 Kelvin.

modellen for kvanteberegning er en generalisering af klassisk computing. Det er matematisk lineær algebra. Matematisk er en kvbit en vektor i et højdimensionelt lineært rum (et Hilbert-rum).

du kan ikke observere kvbit i dette rum, men du kan betjene det ved at anmode systemet om at anvende rotationsoversættelser på det.

nuværende kvantecomputere er i stand til at generere en fysisk kvbit i 10^-6 sekunder. Efter denne periode falder det, så fejlkorrektion er nødvendig.

der er to modeller af Kvanteberegning:

  • gate model – tidsudvikling af kvantetilstand ved hjælp af matrice multiplikation. Dette er den model, som K # bruger.
  • Kvantglødning — at finde den laveste energitilstand, der løser et problem. Computeren bruger denne metode.

klassisk computing er et specielt tilfælde af kvanteberegning. Så udviklinger og opdagelser inden for kvanteberegning skaber indsigt i klassisk computing.

Kvanteberegningseffekter

overskriftsplakatbarnet til Kvanteberegning er i stand til at bryde de nuværende krypteringsordninger. Der vil dog sandsynligvis være mange flere effektive ændringer inden da.

at bryde moderne kryptografi kræver kvantecomputere med 5000 kvbits.

Microsoft er allerede ved at udrulle post-kvante-computing-resistent kryptering — inklusive gitterbaseret kryptografi. Moderne kryptografi er baseret på factoring af store primtal — klassisk dyrt at løse, men trivielt for kvantecomputere.

Niskc er “Noisy Intermediate Scale kvantecomputere”. Nogle mennesker udvikler computere, der har et stort antal støjende kvbits. MS gør det ikke. De arbejder på at få deres første “topologiske kvbit” — en kvbit, der er resistent over for decoherence. Det vil være mere beregningsmæssigt relevant. De er på vej til at få det i år. John håber,at vi i hans levetid vil se 1000-1.000. 000 kvbits på en skive på 15millikelvin.

når vi får kvantecomputere online, er en af de ting, de vil hjælpe os med at modellere fysiske systemer, som vi kan bruge til at gøre mere effektive kvantecomputere.

løsning af problemer som Nitrogenase, eller hvordan klorofyl fanger CO2 fra atmosfæren og forvandler det til kulhydrater — vender drivhuseffekten og giver os mulighed for at skabe mad ud af tynd luft (og solskin) — er tættere på horisonten og vil have en enorm indflydelse — ligesom brug af kvantecomputere til at udvikle superledere.

og de vil også låse op for problemer og muligheder, som vi ikke engang overvejer lige nu. Einstein tænkte ikke på iPhone eller internettet, da han offentliggjorde sit papir om sort kropsstråling.

vi lever i fremtiden lige nu.

for et par gode bøger, der introducerer kvantefysik uden mange matematik, anbefaler jeg:

“på jagt efter Schrodingers kat: Kvantefysik og virkelighed” — en populær historie om udviklingen af kvantemekanik, der sporer udviklingen af tanke og opdagelse gennem det 20.århundrede.

“virkelighedens Stof – videnskaben om parallelle universer og dens implikationer” — en bog af David Deutsch, En pioner inden for Kvanteberegning. Denne bog starter med videnskabsfilosofi (specifikt dens epistemologi) og fortsætter med at undersøge nogle af de filosofiske implikationer af kvantemekanik.

hvis du vil komme lige ind i det, skal du tjekke “Kvanteberegning til computerforskere”. Dette er den bog, som John anbefaler.

der er kendt teknik i dette rum-f.eks. I en kvantecomputer SDK, der inkluderer en 3-kvbit lokal simulator og adgang til en 40-kvbit skybaseret simulator. IBM har et programmeringssprog for kvantesamling, der har en Ridselignende visuel editor og en skybaseret (ægte) kvantecomputerplatform. Spørgsmål# er et sprog på højere niveau med typer og kontrolstrøm.



+