Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Functors to fabryki, które umożliwiają dostęp do określonych implementacji specjalizacji wywoływania.
Q# obecnie obsługuje dwie funktory; Adjoint i Controlled, z których oba mogą być stosowane do operacji zapewniających niezbędne specjalizacje.
Controlled i Adjoint dojeżdżają do pracy; jeśli ApplyUnitary jest operacją, która obsługuje obie funktory, nie ma różnicy między Controlled Adjoint ApplyUnitary a Adjoint Controlled ApplyUnitary.
Oba mają ten sam typ, a po wywołaniu wykonaj implementację zdefiniowaną dla specjalizacji controlled adjoint.
Adjoint functor
Jeśli operacja ApplyUnitary definiuje unitarne przekształcenie U stanu kwantowego, Adjoint ApplyUnitary uzyskuje dostęp do implementacji U†. Functor Adjoint jest jego odwrotnością, ponieważ (U†)† = U według definicji. Na przykład Adjoint Adjoint ApplyUnitary jest taka sama jak ApplyUnitary.
Wyrażenie Adjoint ApplyUnitary jest operacją tego samego typu co ApplyUnitary; ma ten sam argument i zwracany typ i obsługuje te same funktory. Podobnie jak każda operacja, można ją wywołać za pomocą argumentu odpowiedniego typu. Następujące wyrażenie stosuje specjalizacji ApplyUnitary do argumentu arg:
Adjoint ApplyUnitary(arg)
Kontrolowany funktor
W przypadku operacji ApplyUnitary definiującej przekształcenie jednostkowe U stanu kwantowego, Controlled ApplyUnitary uzyskuje dostęp do implementacji, która stosuje U warunkowe dla wszystkich kubitów w tablicy kubitów kontrolnych w stanie |1⟩.
Wyrażenie Controlled ApplyUnitary jest operacją o tym samym typie zwracanym i właściwości operacji co ApplyUnitary, co oznacza, że obsługuje te same funktory.
Przyjmuje argument typu (Qubit[], <TIn>), gdzie <TIn> należy zastąpić typem argumentu ApplyUnitary, biorąc pod uwagę równoważn ość jednotonowej krotki.
| Operacja | Typ argumentu | Kontrolowany typ argumentu |
|---|---|---|
| X | Qubit |
(Qubit[], Qubit) |
| ZAMIANA | (Qubit, Qubit) |
(Qubit[], (Qubit, Qubit)) |
Jeśli cs zawiera tablicę kubitów, q1 i q2 są dwoma kubitami, a operacja SWAP jest zdefiniowana tutaj, następujące wyrażenie wymienia stan q1 i q2, jeśli wszystkie kubity w cs znajdują się w stanie |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ąć przez zastosowanie odpowiedniego przylegającego przekształcenia do kubitów kontrolnych przed wywołaniem i zastosowanie odwrotnych elementów po. Skonfigurowanie przekształcenia wszystkich kubitów sterujących w stanie |0⟩ można na przykład osiągnąć przez zastosowanie operacji X przed i po. Można to wygodnie wyrazić przy użyciu sprzężenia. Niemniej jednak szczegółowość takiej konstrukcji może mieć dodatkowe wsparcie dla bardziej kompaktowej składni w przyszłości.