Aplikace funktoru
Functory jsou továrny, které umožňují přístup ke konkrétním implementaci specializace volatelné. Q# v současné době podporuje dva funktory; Adjoint
Controlled
a obojí, které lze použít na operace, které poskytují nezbytné specializace.
A Controlled
functory dojíždět; pokud ApplyUnitary
je operace, která podporuje obě funktory, pak neexistuje žádný rozdíl mezi Controlled Adjoint ApplyUnitary
a Adjoint Controlled ApplyUnitary
Adjoint
.
Oba mají stejný typ a po vyvolání proveďte implementaci definovanou controlled adjoint
pro specializaci.
Adjoint functor
Pokud operace ApplyUnitary
definuje jednotkovou transformaci U kvantového stavu, Adjoint ApplyUnitary
přistupuje k implementaci U†. Functor Adjoint
je jeho vlastní inverzní, protože (U†)† = U podle definice. Například trasa Adjoint Adjoint ApplyUnitary
je stejná jako ApplyUnitary
.
Výraz Adjoint ApplyUnitary
je operace stejného typu jako ApplyUnitary
; má stejný argument a návratový typ a podporuje stejné funktory. Stejně jako jakoukoli operaci lze vyvolat pomocí argumentu vhodného typu. Následující výraz použije doplňkovou specializaci argumentu ApplyUnitary
arg
:
Adjoint ApplyUnitary(arg)
Řízený functor
Pro operaciApplyUnitary
, která definuje jednotkovou transformaci U kvantového stavu, Controlled ApplyUnitary
přistupuje k implementaci, která aplikuje U podmíněný na všechny qubity v poli řídicích qubitů, které jsou ve stavu |1⟩.
Výraz Controlled ApplyUnitary
je operace se stejným návratovým typem a vlastnostmi operace jako ApplyUnitary
, což znamená, že podporuje stejné funktory.
Bere v úvahu argument typu (Qubit[], <TIn>)
, kde <TIn>
by měl být nahrazen typem argumentu ApplyUnitary
, s ohledem na ekvivalenci řazené kolekce členů singleton.
Operace | Typ argumentu | Typ řízeného argumentu |
---|---|---|
X | Qubit |
(Qubit[], Qubit) |
SWAP | (Qubit, Qubit) |
(Qubit[], (Qubit, Qubit)) |
Konkrétně platí, že pokud cs
obsahuje pole qubitů q1
a q2
jsou dva qubity a operace SWAP
je zde definována, následující výraz vymění stav q1
a q2
pokud jsou všechny qubity cs
ve stavu |1⟩:
Controlled SWAP(cs, (q1, q2))
Poznámka:
Podmíněné použití operace na základě řídicích qubitů, které jsou ve stavu jiném než |1⟩, lze dosáhnout použitím odpovídající adjointable transformace na řídicí qubity před vyvoláním a použitím inverzních inverzních funkcí po. Transformaci všech řídicích qubitů, které jsou ve stavu |0⟩, lze například dosáhnout použitím X
operace před a po. To lze pohodlně vyjádřit pomocí konjugace. Podrobnosti takového konstruktoru však mohou v budoucnu zasáhnou další podporu kompaktnější syntaxe.