Udostępnij przez


Typy danych specyficznych dla kwantu

W tym temacie opisano typ Qubit wraz z dwoma innymi typami, które są nieco specyficzne dla domeny kwantowej: Pauli i Result.

Kubit

Q# traktuje kubity jako nieprzezroczyste elementy, które mogą być przekazywane zarówno do funkcji, jak i operacji, ale mogą być używane tylko przez przekazanie ich do instrukcji natywnych dla docelowego procesora kwantowego. Takie instrukcje są zawsze definiowane w postaci operacji, ponieważ ich celem jest zmodyfikowanie stanu kwantowego. Ograniczenie, że funkcje nie mogą modyfikować stanu kwantowego, pomimo faktu, że kubity mogą być przekazywane jako argumenty wejściowe, jest wymuszane przez wymaganie, aby funkcje mogły wywoływać tylko inne funkcje i nie mogą wywoływać operacji.

Biblioteki Q# są kompilowane względem standardowego zestawu operacji wewnętrznych, co oznacza, że operacje, które nie mają definicji implementacji w języku. Po określaniu wartości docelowej implementacje, które je wyrażają pod względem instrukcji natywnych dla celu wykonywania, są połączone przez kompilator. Program Q# łączy te operacje zgodnie z definicją maszyny docelowej w celu utworzenia nowych operacji wyższego poziomu w celu wyrażenia obliczeń kwantowych. W ten sposób Q# sprawia, że bardzo łatwo jest wyrazić logikę podstawowych algorytmów kwantowych i hybrydowych kwantowo-klasycznych, a jednocześnie jest bardzo ogólne w odniesieniu do struktury maszyny docelowej i jej realizacji stanu kwantowego.

W samym Q# nie ma typu ani konstrukcji w Q#, która reprezentuje stan kwantowy. Zamiast tego kubit reprezentuje najmniejszą, adresową jednostkę fizyczną w komputerze kwantowym. W związku z tym kubit jest elementem długotrwałym, dlatego Q# nie ma potrzeby obsługi typów liniowych. W związku z tym nie odwołujemy się jawnie do stanu w Q#, ale raczej opisujemy sposób przekształcania stanu przez program, na przykład za pośrednictwem stosowania operacji, takich jak X i H. Podobnie jak program cieniowania grafiki gromadzi opis przekształceń do każdego wierzchołka, program kwantowy w Q# gromadzi przekształcenia do stanów kwantowych, reprezentowane jako całkowicie nieprzezroczyste odwołania do wewnętrznej struktury maszyny docelowej.

Program Q# nie ma możliwości introspekcyjności w stanie kubitu, a tym samym jest całkowicie niezależny od tego, czym jest stan kwantowy lub jak jest zrealizowany. Zamiast tego program może wywoływać operacje, takie jak Measure, aby dowiedzieć się więcej o stanie kwantowym obliczeń.

Pauli

Wartości typu Pauli określają operator Pauli z jednym kubitem; możliwości to PauliI, PauliX, PauliYi PauliZ. Pauli wartości są używane głównie do określania podstawy pomiaru kwantowego.

Wynik

Typ Result określa wynik pomiaru kwantowego. Q# dubluje większość sprzętu kwantowego, zapewniając pomiary w produktach operatorów Pauli z jednym kubitem; ResultZero wskazuje, że wartość eigenu +1 została zmierzona, a ResultOne wskazuje, że wartość -1 eigen została zmierzona. Oznacza to, że Q# reprezentuje eigenvalues przez moc, do której -1 jest podniesiona. Ta konwencja jest częściej spotykana w społeczności algorytmów kwantowych, ponieważ mapuje bardziej na bity klasyczne.