programowanie komputerów kwantowych z Q#

w tym tygodniu jestem na konferencji programistów NDC w Sydney. Podczas pobytu tutaj uczestniczyłem w warsztatach na temat programowania komputerów kwantowych za pomocą Q#, prowadzonych przez Johna Azariaha, twórcę języka programowania Q#.

z Johnem Azariahem, twórcą języka Q#, kwantowego języka programowania komputerowego. Jeśli wyglądam na zmęczonego, to dlatego, że do 3 nad ranem pisałem mój pierwszy program kwantowy w Q#.

Q# to niedawno wydany język Microsoft opracowany specjalnie do programowania operacji na komputerach kwantowych z klasycznego komputera. Jest obsługiwany na komputerach Mac, Windows i Linux.

co jest tak ekscytujące W Q#, to to, że jest to abstrakcja obliczeń kwantowych na nowym poziomie semantycznym. Możesz wyrażać złożone idee zwięźle (pomyśl o języku C kontra Assembly). Nowe poziomy abstrakcji semantycznej pozwalają na pojawienie się nowych paradygmatów.

Q# nie jest jednak po prostu nowym poziomem abstrakcji w stosunku do poprzedniego, znanego. Q# jest semantyczną abstrakcją nad rewolucyjnym sprzętem, który wciąż jest fizycznie wdrażany-komputerem kwantowym.

możesz wyrazić rzeczy w Q#, których po prostu nie możesz wyrazić w klasycznym języku komputerowym.

Q# jest bardziej podobny do języka asemblacji dla komputerów kwantowych, pod względem prymitywów, które zawiera. Jesteśmy w zasadzie z komputerami kwantowymi, gdzie byliśmy w późnych latach 40-tych / wczesnych 50-tych z klasycznymi komputerami.

Q# model programowania

model programowania dla Q# polega na traktowaniu komputera kwantowego jako koprocesora. Jest to podobne do pracy z GPU-jednostką przetwarzania grafiki w karcie graficznej komputera. GPU jest wyspecjalizowanym procesorem do kruszenia wielokątów i obliczania cieniowania. Okazuje się, że GPU są również dobre dla rodzaju crunching liczby potrzebne do wydobycia Bitcoin zbyt, więc ludzie używają ich do tego. Aby zaprogramować procesor graficzny, należy złożyć instrukcje dla procesora graficznego za pomocą języka specyficznego dla domeny, a następnie wysłać je z głównego procesora komputera do procesora graficznego w celu wykonania.

za pomocą Q# piszesz operacje kwantowe w języku Q#, który jest bezpaństwowym, funkcjonalnym językiem, a następnie wysyłasz je do komputera kwantowego z programu napisanego w C# działającego na klasycznym procesorze, gdzie również otrzymujesz ostateczne wyjście z komputera kwantowego.

przykład Q# Kod

po warsztatach napisałem program Q#, który demonstruje proste zachowanie kwantowe, które różni się od zachowania klasycznego komputera.

program HGate pokazuje szczególny przypadek słynnego eksperymentu Double-slit, w którym obserwacja stanu pośredniego układu wpływa na jego zachowanie.

„Bóg nie gra w kości…” — Albert Einstein

aby zrozumieć zachowanie wyświetlane przez ten program: wyobraź sobie, że bierzesz monetę i zaczynasz od głowy do góry, a następnie rzucasz nią. Ma 50% szans na wypadnięcie orła lub reszka. Sprawdź, co to jest, a następnie odwróć go ponownie. Ma 50% szans na powtórzenie Orłów lub reszek.

całkiem prosto. Oto kwantowa dziwność. W sferze kwantowej, jeśli moneta jest cząstką podlegającą efektom kwantowym, odwracamy ją wysyłając przez układ logiki kwantowej zwany Bramą Hadamarda. Jeśli spojrzysz na to po pierwszym rzucie, otrzymasz 50/50 Orzeł / reszka w tym rzucie i w drugim rzucie. Jeśli jednak nie spojrzysz na to po pierwszym rzucie, drugi rzut wychodzi Orzeł — za każdym razem.

Albert Einstein, który jako pierwszy odkrył mechanikę kwantową, nie mógł uwierzyć, że wszechświat może tak działać. A jednak tak jest, bo inaczej nie mielibyśmy iphone ’ ów i innych nowoczesnych urządzeń elektronicznych, które działają w bardzo małej skali i wykorzystują szereg kwantowych zachowań, takich jak to. Einstein spędził resztę życia próbując udowodnić, że kwantowa dziwność, którą odkrył, nie była rzeczą, bezskutecznie. I dlatego nie ma za to uznania. Ale tak, opublikował trzy prace w tym samym czasie — jeden był dowodem na istnienie atomów, drugi był względnością, a trzeci dotyczył promieniowania ciała czarnego, które jest zjawiskiem mechaniki kwantowej.

aby przeczytać trochę więcej o tym, dlaczego dzieje się to specyficzne zachowanie kwantowe, zobacz README.md plik przykładowego programu.

operacja kwantowa Q#

oto przykład operacji kwantowej zapisanej w Q#, zaczerpnięty z przykładowego programu podlinkowanego powyżej:

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

Projekt Języka Q#

Q# czerpie inspirację z F# jako języka funkcjonalnego (kompilator / parser jest napisany w F#), C# dla składni i czerpie pewne pomysły z Pythona (zwłaszcza for in).

jest to język bezstanowy — nie ma możliwości utrzymywania stanu między operacjami kwantowymi, a pomiar stanu zwracający wartość z operacji powoduje, że stan kwantowy staje się jednym stanem rzeczywistym. Nie ma zmiennych, ale używa wiązania stałych niezmiennych.

typy są oparte na krotce, z dowolną arytmetyką. Nie ma częściowego wsparcia aplikacyjnego, posiada Generyki i funktory. Funktory pozwalają na wyrażanie i uzasadnianie sekwencji operacji.

kompilator Q# może wykonać całą analizę programu i rozum nad kodem, aby dokonać optymalizacji przed wysłaniem operacji do komputera kwantowego. Jest to ważne ze względu na koszt operacji, zwłaszcza biorąc pod uwagę niewielki skrawek czasu, w którym stan kubitu jest spójny z obecnymi i prawdopodobnymi (krótkoterminowymi) przyszłymi komputerami kwantowymi.

Jakie Problemy Mogą Rozwiązać Komputery Kwantowe?

Klasyczne komputery używają bitów, które mogą mieć jeden z dwóch stanów — jeden lub zero. Kwantowe bity komputerowe, lub kubity, mają tylko jeden z tych dwóch stanów, ale wewnątrz komputera kwantowego mogą mieć Stany probabilistyczne. Dzięki temu mogą modelować wiele stanów-zwłaszcza probabilistyczne przebiegi Stanów cząstek. Jak zrobić użyteczne obliczenia z tym? Jest dobry do modelowania układów fizycznych.

w 1911 roku odkryliśmy, jak zrobić amoniak. Wymaga podgrzania azotu do 5000 stopni i sprężania go do 50 atmosfer. Ten amoniak jest używany do prochu strzelniczego i nawozu, a ten nawóz pozwolił na zieloną rewolucję lat 60., która pozwoliła nam podwoić globalną populację ludzi. 4% światowego budżetu energetycznego przeznacza się na produkcję amoniaku.

Nitrogenaza jest enzymem bakterii, która żyje w pasożytniczych guzkach na korzeniach fasoli. Kiedy uprawiasz fasolę na polu, ten enzym przenosi azot z atmosfery do ziemi, nawożąc glebę. Rolnicy obracają uprawy-uprawę pszenicy, potem fasoli, potem pszenicy – aby utrzymać żyzną glebę.

aby zrozumieć, w jaki sposób bakterie wytwarzają amoniak — w temperaturze pokojowej za pomocą H2O + N z atmosfery — wymaga rozwiązania interakcji 170 elektronów. Nitrogenaza ma dwa metale przejściowe, które działają jako katalizatory: żelazo i molibden. Oznacza to, że potrzebujemy 21⁷⁰ liczb zespolonych do modelowania przebiegów elektronów. Na ziemi jest tylko 21⁵⁰ atomów – więc potrzebowalibyśmy 1 000 000 ziem, aby zapisać definicję problemu.

komputer kwantowy z 200 kubitami może modelować tyle Stanów.

za pomocą tego komputera możemy przeprowadzić symulacje, aby zrozumieć, jak to zrobić, tak jak robią to bakterie. Będzie dodatkowa Inżynieria, gdy będziemy mieli rozwiązanie, aby zbudować coś, co może to zrobić-tak jak nowe związki leków muszą być produkowane. A kiedy to nastąpi, produkcja rolna rolnictwa będzie znacznie wyższa.

Budowa komputera kwantowego

w komputerze kwantowym istnieją dwa składniki kubitu — jakiś składnik fizyczny, który utrzymuje stan kwantowy, i składnik, który wykonuje operacje na komponencie fizycznym.

Kubit — przynajmniej tak jak teraz do niego podchodzimy — działa przy 15 milikelwinach. Ciekły hel ma 4 Kelviny.

model obliczeń kwantowych jest uogólnieniem obliczeń klasycznych. Matematycznie jest to algebra liniowa. Matematycznie Kubit jest wektorem w wysokowymiarowej przestrzeni liniowej (przestrzeni Hilberta).

nie możesz obserwować kubitu w tej przestrzeni, ale możesz na nim operować, żądając od systemu zastosowania do niego tłumaczeń rotacyjnych.

obecne komputery kwantowe są w stanie wygenerować fizyczny Kubit przez 10^-6 sekund. Po tym okresie rozpada się, więc konieczna jest korekcja błędów.

istnieją dwa modele obliczeń kwantowych:

  • model bramy-czasowa ewolucja stanu kwantowego z wykorzystaniem mnożenia macierzy. Jest to model, którego używa Q#.
  • wyżarzanie kwantowe-znalezienie najniższego stanu energii, który rozwiązuje problem. Komputer DWave używa tej metody.

Komputery Klasyczne to szczególny przypadek komputerów kwantowych. Tak więc rozwój i odkrycia w informatyce kwantowej powodują wgląd w klasyczną informatykę.

skutki obliczeń kwantowych

głównym plakatem prawdopodobnego przyszłego wpływu obliczeń kwantowych jest możliwość złamania obecnych schematów szyfrowania. Istnieje jednak prawdopodobieństwo, że do tego czasu nastąpi o wiele więcej wpływowych zmian.

przełamanie nowoczesnej kryptografii będzie wymagało komputerów kwantowych o pojemności 5000 kubitów.

Microsoft już wdraża szyfrowanie odporne na przetwarzanie kwantowe-w tym kryptografię opartą na sieci kratowej. Współczesna kryptografia opiera się na faktoringu dużych liczb pierwszych — klasycznie kosztownych do rozwiązania, ale trywialnych dla komputerów kwantowych.

NISQC to „Noisy Intermediate Scale Quantum Computing”. Niektórzy ludzie opracowują komputery, które mają dużą liczbę hałaśliwych kubitów. MS tego nie robi. Pracują nad otrzymaniem pierwszego „kubitu topologicznego” – kubitu odpornego na dekoherencję. Będzie to bardziej istotne obliczeniowo. Są na dobrej drodze do zdobycia go w tym roku. John ma nadzieję, że za jego życia zobaczymy 1000-1 000 000 kubitów na waflu przy 15 mililitrach.

gdy mamy komputery kwantowe online, jedną z rzeczy, które nam pomogą, jest modelowanie systemów fizycznych, które możemy wykorzystać do stworzenia bardziej wydajnych komputerów kwantowych.

Rozwiązywanie problemów, takich jak Nitrogenaza, czyli jak chlorofil wychwytuje CO2 z atmosfery i zamienia go w węglowodany — odwracając efekt cieplarniany i pozwalając nam tworzyć żywność z powietrza (i słońca) — jest bliżej horyzontu i będzie miało ogromny wpływ — podobnie jak wykorzystanie komputerów kwantowych do opracowania nadprzewodników.

i odblokują również problemy i możliwości, których nawet nie rozważamy w tej chwili. Einstein nie myślał o iPhonie ani Internecie, kiedy opublikował pracę na temat promieniowania czarnego ciała.

żyjemy teraz w przyszłości.

za kilka świetnych książek, które wprowadzają fizykę kwantową bez dużej ilości matematyki, polecam:

„w poszukiwaniu kota Schrodingera: Fizyka kwantowa a rzeczywistość ” – popularna historia rozwoju mechaniki kwantowej, śledząca ewolucję myśli i odkryć w XX wieku.

„Tkanina rzeczywistości-nauka o wszechświatach równoległych i jej implikacje” – książka Davida Deutsch, pioniera Informatyki Kwantowej. Ta książka zaczyna się od filozofii nauki (w szczególności jej epistemologii), a następnie bada niektóre filozoficzne implikacje mechaniki kwantowej.

jeśli chcesz się do tego zabrać, sprawdź „Informatyka kwantowa dla informatyków”. To jest książka, którą poleca John.

istnieje w tej przestrzeni prior art-na przykład Quipper, który jest zaimplementowany w Haskell. Jednak Q# jest dostarczany w zestawie Quantum Computing SDK, który zawiera 3-kubitowy lokalny symulator i dostęp do 40-kubitowego symulatora opartego na chmurze. IBM ma OpenQASM-język programowania Quantum assembly, który ma edytor wizualny podobny do Scratcha i opartą na chmurze (prawdziwą) kwantową platformę komputerową. Q# jest językiem wyższego poziomu z typami i przepływem sterowania.



+