Aplikacja funktora
Functors to fabryki, które umożliwiają dostęp do określonych implementacji specjalizacji wywoływanego. Q# obecnie obsługuje dwa functory; i Adjoint
Controlled
, z których oba mogą być stosowane do operacji, które zapewniają niezbędne specjalizacje.
Adjoint
I Controlled
functors dojazdy; jeśli ApplyUnitary
jest operacją, która obsługuje oba functors, nie ma różnicy między Controlled Adjoint ApplyUnitary
i Adjoint Controlled ApplyUnitary
.
Oba typy mają ten sam typ, a po wywołaniu wykonaj implementację zdefiniowaną controlled adjoint
dla specjalizacji.
Adjoint functor
Jeśli operacja ApplyUnitary
definiuje unitary przekształcenia U stanu kwantowego, Adjoint ApplyUnitary
uzyskuje dostęp do implementacji U†. Functor Adjoint
jest własną odwrotnością, ponieważ (U†)† = U według definicji. Na przykład kod Adjoint Adjoint ApplyUnitary
jest taki sam jak kod ApplyUnitary
.
Wyrażenie Adjoint ApplyUnitary
jest operacją tego samego typu co ApplyUnitary
; ma ten sam argument i zwracany typ i obsługuje te same functory. Podobnie jak każda operacja, można ją wywołać argumentem odpowiedniego typu. Następujące wyrażenie stosuje specjalizację adjoint argumentu ApplyUnitary
arg
:
Adjoint ApplyUnitary(arg)
Kontrolowany functor
W przypadku operacji ApplyUnitary
definiującej unitarne przekształcenie U stanu Controlled ApplyUnitary
kwantowego uzyskuje dostęp do implementacji, która stosuje U warunkowe dla wszystkich kubitów w tablicy kubitów sterujących będących w stanie |1⟩.
Wyrażenie Controlled ApplyUnitary
jest operacją o tym samym typie zwracanym i cechach operacji co ApplyUnitary
, co oznacza, że obsługuje te same functory.
Przyjmuje argument typu (Qubit[], <TIn>)
, gdzie <TIn>
należy zastąpić typem argumentu ApplyUnitary
, biorąc pod uwagę równoważność krotki pojedynczej .
Operacja | Typ argumentu | Kontrolowany typ argumentu |
---|---|---|
X | Qubit |
(Qubit[], Qubit) |
SWAP | (Qubit, Qubit) |
(Qubit[], (Qubit, Qubit)) |
Jeśli konkretnie cs
zawiera tablicę kubitów q1
i q2
są dwoma kubitami, a operacja SWAP
jest zdefiniowana w tym miejscu, następujące wyrażenie wymienia stan i q2
jeśli wszystkie kubity znajdują cs
się w stanie q1
|1⟩:
Controlled SWAP(cs, (q1, q2))
Uwaga
Warunkowe zastosowanie operacji na podstawie kubitów kontrolnych będących w stanie innym niż |1⟩ można osiągnąć, stosując odpowiednie przylegające przekształcenia do kubitów kontrolnych przed wywołaniem i stosując odwrotność po. Wyliczenie przekształcenia wszystkich kubitów sterujących w stanie |0⟩ można na przykład osiągnąć, stosując operację X
przed i po. Można to wygodnie wyrazić przy użyciu połączenia. Niemniej jednak szczegółowość takiej konstrukcji może mieć dodatkowe wsparcie dla bardziej kompaktowej składni w przyszłości.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla