Typy danych specyficznych dla kwantu

W tym temacie opisano Qubit typ 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 można przekazać do funkcji i operacji, ale można z nimi korzystać 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, które 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 ich implementacji w języku. Po określaniu wartości docelowej implementacje, które wyrażają je pod względem instrukcji natywnych dla obiektu docelowego wykonywania, są połączone przez kompilator. W Q# ten sposób program łączy te operacje zdefiniowane przez maszynę docelową w celu utworzenia nowych operacji wyższego poziomu w celu wyrażenia obliczeń kwantowych. W ten sposób Q# bardzo łatwo jest wyrazić logikę bazową algorytmów kwantowych i hybrydowych kwantowo-klasycznych, a jednocześnie jest bardzo ogólna w odniesieniu do struktury maszyny docelowej i jej realizacji stanu kwantowego.

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

Q# Program nie ma możliwości introspekcyjności w stanie kubitu, a tym samym jest całkowicie niezależny od tego, co jest stanem kwantowym lub w jaki sposób jest zrealizowany. Zamiast tego program może wywoływać operacje, takie jak Measure informacje 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 miary kwantowej. Q# dubluje większość sprzętu kwantowego, zapewniając pomiary w produktach operatorów Pauli z jednym kubitem; a Result wskazuje Zero , że wartość +1 eigenvalue została zmierzona, a wartość ResultOne wskazuje, że wartość -1 eigen została zmierzona. Oznacza to, Q# że reprezentuje eigenvalues przez moc, do której jest podniesione -1. Ta konwencja jest częściej spotykana w społeczności algorytmów kwantowych, ponieważ jest ona bardziej zbliżona do klasycznych bitów.