Jak wyglądałby bardzo prosty program kwantowy?

76

W świetle ogłoszenia pierwszego na świecie programowalnego układu kwantowego , zastanawiałem się, jakie byłoby oprogramowanie dla komputera wykorzystującego splątanie kwantowe. Jeden z pierwszych programów, które napisałem, był podobny

for i = 1 to 10
  print i
next i

Czy ktoś może podać przykład kodu o porównywalnej prostocie, który wykorzystywałby kwantowe układy fotoniczne (lub podobny sprzęt), w pseudokodzie lub języku wysokiego poziomu? Mam trudności z przejściem z koncepcyjnego programowania do splątania itp.

Xpda
źródło
twój link jest zepsuty
Suresh Venkat,
1
+1 i dla tego pytania. Bardzo ciekawi mnie język programowania oparty na innym paradygmacie niż Turing Machines, jakkolwiek byśmy nie byli w stanie wykonać kodu w komputerze kwantowym.
Janoma,

Odpowiedzi:

59

Caveat Emptor: następujące są bardzo stronnicze w moich własnych badaniach i poglądach na polu QC. Nie stanowi to ogólnego konsensusu w tej dziedzinie i może nawet zawierać autopromocję.

Problem z pokazaniem „cześć światu” obliczeń kwantowych polega na tym, że w zasadzie wciąż jesteśmy tak daleko od komputerów kwantowych, jak Leibnitz lub Babbage od obecnego komputera. Chociaż wiemy, jak powinny działać teoretycznie, nie ma standardowego sposobu na zbudowanie fizycznego komputera kwantowego. Efektem ubocznym tego jest brak jednego modelu programowania obliczeń kwantowych. Podręczniki takie jak Nielsen i in. pokaże ci schemat „obwodu kwantowego”, ale są one dalekie od formalnych języków programowania: dostają trochę „machania ręką” na szczegółach, takich jak klasyczna kontrola lub radzenie sobie z wynikami wejścia / wyjścia / pomiarów.

To, co najbardziej mi się podobało w moich badaniach jako informatyk w języku programowania, i aby przenieść się do QC wśród innych informatyków, to użycie najprostszego modelu QC, z którym się spotkałem, który robi wszystko.

Najprostszym programem obliczeń kwantowych, który widziałem, który zawiera wszystkie niezbędne elementy, jest mały program z trzema instrukcjami w najprostszym modelu programowania kwantowego, z jakim się spotkałem. Używam tego jako „cześć świata”, aby poznać podstawy.

Pozwólcie, że przedstawię szybkie uproszczone podsumowanie rachunku pomiarowego Danos i in. 1, na którym opiera się, opiera się na jednokierunkowym komputerze kwantowym 2 : kubit jest niszczony podczas pomiaru, ale jego pomiar wpływa na wszystkie inne kubity, które były z nim splątane. Ma pewne teoretyczne i praktyczne zalety w porównaniu z komputerami kwantowymi „opartymi na obwodach”, jakie realizuje układ fotoniczny, ale to inna dyskusja.

Rozważmy komputer kwantowy, który ma tylko pięć instrukcji: N, E, M, X i Z. Jego „język asemblera” jest podobny do zwykłego komputera, po wykonaniu jednej instrukcji przechodzi do następnej instrukcji w sekwencji. Każda instrukcja przyjmuje docelowy identyfikator kubitowy, używamy tutaj tylko liczby i innych argumentów.

N 2          # create a new quantum bit and identify it as '2'
E 1 2        # entangle qubits '1' and '2', qubit 1 already exists and is considered input
M 1 0        # measure qubit '1' with an angle of zero  (angle can be anything in [0,2pi]
             # qubit '1' is destroyed and the result is either True or False
             # operations beyond this point can be dependent on the signal of '1'
X 2 1        # if the signal of qubit '1' is True, execute the Pauli-X operation on qubit '2'

Powyższy program tworzy zatem ancilla, zaplątuje ją w qubit wejściowy, mierzy dane wejściowe iw zależności od wyniku pomiaru wykonuje operację na ancilla. W rezultacie qubit 2 zawiera teraz stan qubit 1 po operacji Hadamarda .

Powyżej jest naturalnie na tak niskim poziomie, że nie chciałbyś go ręcznie kodować. Zaletą rachunku pomiarowego jest to, że wprowadza on „wzorce”, pewnego rodzaju makra kompozycyjne, które umożliwiają komponowanie większych algorytmów, tak jak w przypadku podprogramów. Zaczynasz od wzorców z 1 instrukcją i stamtąd wyrastasz z większych wzorców.

Zamiast sekwencji instrukcji przypominającej asembler często zapisuje się program jako wykres:

 input                .........
    \--> ( E ) ---> (M:0)     v
(N) ---> (   ) ------------> (X) ---> output

gdzie pełne strzałki są zależnościami kubitowymi, a kropkowana strzałka jest zależnością „sygnałową”.

Poniżej znajduje się ten sam przykład Hadamarda wyrażony w małym narzędziu programistycznym, jakiego wyobrażam sobie jako „programisty kwantowego”.

Narzędzie rachunku pomiarowego

edycja: (dodając relację z komputerami „klasycznymi”) Komputery klasyczne są nadal bardzo wydajne w tym, co robią najlepiej, a więc wizją jest to, że komputery kwantowe będą używane do odciążenia niektórych algorytmów, analogicznie do tego, jak obecny komputer odciąża grafikę do GPU. Jak widzieliśmy powyżej, procesor kontrolowałby komputer kwantowy, wysyłając mu strumień instrukcji i odczytując wyniki pomiarów z logicznych „sygnałów”. W ten sposób masz ścisłe oddzielenie klasycznej kontroli przez procesor i stan kwantowy oraz wpływ na komputer kwantowy.

Na przykład zamierzam użyć mojego koprocesora kwantowego do obliczenia losowej wartości logicznej lub cointossa. Komputery klasyczne są deterministyczne, więc źle zwracają dobrą liczbę losową. Komputery kwantowe są z natury jednak probabilistyczne, wszystko co muszę zrobić, aby uzyskać losowe 0 lub 1, to zmierzyć równo zrównoważony kubit. Komunikacja między CPU a „QPU” wyglądałaby mniej więcej tak:

 qrand()       N 1; M 1 0;
 ==>  | CPU | ------------> | QPU |  ==> { q1 } ,  []
                 start()
      |     | ------------> |     |  ==> { } , [q1: 0]
                 read(q1)         
      |     | ------------> |     |
                  q1: 0 
 0    |     | <-----------  |     |
 <==

Gdzie { ... }jest pamięć kwantowa QPU zawierająca kubity, a [...]jej pamięć klasyczna (sygnałowa) zawiera logiczne wartości.


  1. Danos i in. Rachunek pomiarowy. arXiv (2007) vol. kw. ph
  2. Raussendorf i Briegel. Jednokierunkowy komputer kwantowy. Physical Review Letters (2001) vol. 86 (22) s. 5188–5191
Wołowina
źródło
Doskonała dyskusja na ten temat, dzięki, Wołowina. Btw, OP mówi o: „Mam problem z koncepcyjnym przejściem od tradycyjnego programowania do uwikłania itp.” Zatem coś, co pomaga w tym przejściu, powinno być mile widziane.
Kris
Masz rację, chyba chyba tęskniłem za tą częścią ze wstydem: / Dodanie akapitu.
„Rozważ komputer kwantowy, który ma tylko pięć instrukcji: N, E, M, X i Z”. brak wyjaśnienia instrukcji Z :(
Fernando Gonzalez Sanchez,
Z jest bardzo podobny do X;) en.wikipedia.org/wiki/Pauli_matrices Operacja X zamienia wektor [ab] w [ba], operacja Z zamienia go w [a -b].
Wołowina
21

Zakładam, że libquantum C , monady kwantowe Haskella lub Perl's Quantum :: Entanglement wiernie reprezentują obliczenia kwantowe. Możesz spojrzeć na ich przykłady.

Ogólnie algorytm kwantowy opisuje się jako klasyczny algorytm, który stosuje szereg operatorów liniowych do super-pozycji reprezentującej stan twojego układu kwantowego. Artykuły w czasopismach często przedstawiają obwód z liniami dla bitów / rejestrów kwantowych i skrzynkami dla operatorów liniowych.

Oczywiście trudna część nie opisuje algorytmu, ale rozumie, dlaczego on działa, podobnie jak algorytmy probabilistyczne. Zawsze uważałem algorytm Grovera za całkiem zrozumiały. Możesz także przeczytać o kwantowej transformacie Fouriera używanej przez algorytm Shora .

Jeff Burdges
źródło
11

To wygląda tak: wprowadź opis zdjęcia tutaj

Ty też możesz mieć dostęp do prawdziwego procesora kwantowego. Idź tutaj i zarejestruj się: http://www.research.ibm.com/quantum/

Zawiera również symulator, dzięki czemu możesz testować bez użycia rzeczywistego sprzętu lub użyć kredytów (za darmo), aby uruchomić na rzeczywistym sprzęcie.

Robert Lisiecki
źródło
3

Myślę, że odpowiedź brzmi „bardzo podobny do prostego klasycznego programu”.

Jeśli weźmiemy pod uwagę prosty rachunek lambda (z produktami) jako serce klasycznego programowania, to możemy wykorzystać to, że jest to wewnętrzna teoria typów zamkniętej kategorii kartezjańskiej, która daje nam wskaźnik.

nk

Jeśli więc STLC ma być kartezjańskimi kategoriami zamkniętymi, co to jest zamknięte symetryczne kategorie monoidalne? Wiemy, że wewnętrzną logiką symetrycznej kategorii monoidalnej jest MILL . Potrzebujemy więc teorii typów odpowiadającej MILL - liniowej teorii typów.

Odchodząc od abstrakcyjnych bzdur, co otrzymujemy z teorią typów liniowych? Liniowość. Otrzymujemy liniowość zasobów. I właśnie tego chcemy. Nie wolno klonować bitów kwantowych. Nie wolno ci pośrednio mierzyć. A liniowość oznacza, że ​​nie można tego zrobić podczas redukcji.

Było trochę pracy nad teoriami typu liniowego, ale nie było tony. Kilka pomysłów w tym poście pochodzi z tego artykułu: Fizyka, topologia, logika i obliczenia: kamień z Rosetty autorstwa Mike'a Staya i Johna Baeza.

Darius Jahandarie
źródło
0

Najpierw prawdopodobnie wybrałbym prostą implementację licznika „dziel przez małe n”.

Na przykład: biorąc pod uwagę źródło 10 GHz, wygeneruj sygnał wyjściowy 5 GHz (ale te liczby są dowolne i służą jedynie zilustrowaniu koncepcji).

To pozwala nam ignorować problemy takie jak pamięć i architektura Von Neumanna, i pozwala nam skupić się na tym, czy komponenty rzeczywiście robią coś zrozumiałego.

Następnym celem byłoby zbudowanie małego repertuaru „małego n” (ale chciałbym też słuchać odpowiedzi moich badaczy - jeśli uznaliby, że inne małe cele byłyby bardziej owocne od razu, z pewnością chciałbym zrozumieć co mi mówili.)

Cele długoterminowe obejmowałyby mechanizmy pompowania informacji do systemu i wychodzenia z niego oraz utrzymywania tych informacji wystarczająco długo, aby z nich skorzystać.

(Prawdopodobnie warto pamiętać, że wszystkie wczesne programy komputerowe były „na stałe”. Dopiero po dużym doświadczeniu z tymi systemami mogliśmy wdrożyć zapisane programy).

rdm
źródło
-6

Myślę, że programowanie komputera kwantowego powinno być postrzegane z innego punktu widzenia niż normalne programowanie obiektowe.

QC ma taką samą zdolność mózgu do myślenia i decydowania. Umiejętność myślenia środkami ma moc eksploracji danych jako źródła danych, które byłyby możliwym wyborem i decydowania, który wybrać ze wszystkich możliwych stanów.

Oprogramowanie w tym momencie musiałoby zostać tak skonstruowane, aby kubity stanowiły źródło danych, które można wydobywać i zaplątać z innymi grupami danych.

QC powinna mieć eksploratora danych, który przetwarza odczytywanie danych, łącząc różne opcje razem, różni grupę danych, które przedstawiają informacje, odczytuje wszystkie możliwe stany i wybiera, który z nich kontynuować.

Tak działa nasz mózg. QC jest w stanie zrozumieć i działać zgodnie z prawem Mechaniki Kwantowej, co oznacza, że ​​dajesz problem, a QC pokazuje wszystkie możliwe rozwiązania, aby go rozwiązać.

tak potężna może być kontrola jakości, zgadzasz się?

https://www.cs.rutgers.edu/~mlittman/papers/openhouse11.pdf jest to punkt, od którego należy zacząć, a następnie stworzyć analizator danych, aby zbudować urządzenie kwantowe z bramkami itp., czytnik podłączony do analizatora danych, aby czytać i przekazać opinię. kwantowe dane hosta komponentu źródła danych i zakres wiedzy, w której działa analizator danych.

alex
źródło