Sdílet prostřednictvím


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 Controlleda 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 ApplyUnitaryAdjoint . 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.